Ввод в поиске сбрасывает список: как объявлена ViewModel в SwiftUI-вью
struct OrdersView: View {
@ObservedObject private var viewModel = OrdersViewModel()
@State private var query = ""
var body: some View {
VStack {
TextField("Поиск", text: $query)
List(viewModel.orders) { order in
Text(order.title)
}
}
}
}
При вводе каждого символа список моргает и загрузка заказов стартует заново. Что не так?
- @State и @ObservedObject нельзя использовать в одной вью, их обновления конфликтуют
- List пересоздаёт свои ячейки при каждом обновлении тела вью, поэтому запросы уходят повторно; поможет модификатор .id на List
- ViewModel создаётся в теле структуры-вью и пересоздаётся вместе с ней; владеть объектом должен @StateObject
- @ObservedObject не подписывается на objectWillChange, поэтому нужно вызывать objectWillChange.send() вручную
