Запретить NavigationLink от обработки переменной состояния - PullRequest
0 голосов
/ 19 октября 2019

Мне не нравится мой титул, но это лучшее, что я могу придумать. По сути, у меня есть два представления: SearchInput и SearchResultList. Пользователь вводит поисковый запрос с помощью SearchInput, нажимает «Перейти» и затем видит результаты поиска с помощью SearchResultList. Код:

struct SearchInput: View {
    @State private var searchTerm: String = ""

    var searchResult: [RTDocument] {
        return RuntimeDataModel.shared.fetchRTDocuments(matching: self.searchTerm)
    }

    var body: some View {
        NavigationView {
            VStack {
                TextField("Enter search term...", text: self.$searchTerm)

                NavigationLink(destination: SearchResultList(
                    rtDocuments: self.searchResult
                )) { Text("Go") } //NavigationLink
            } //VStack
        } //NavigationView
    } //body
} //SearchInput

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда пользователь вводит символ в TextField, обновляется переменная связанного состояния searchTerm, в результате чего NavigationLink переоценивает свое назначение - что вызываетОсновные данные извлекаются из вычисляемой переменной searchResult.

Я бы хотел, чтобы выборка происходила только один раз, когда пользователь нажимает «Перейти». Есть ли способ сделать это?

1 Ответ

0 голосов
/ 19 октября 2019

Это ожидаемое поведение, поэтому в общем случае вам следует перепроектировать свой SearchResultList, но это может помочь в качестве обходного пути:

Объявление состояния на вводе:

@State var shouldNavigate = false

Затем разделитеКнопка формы навигационной ссылки.

Group {         
    Button("Go") {
        self.shouldNavigate = true
    }
    NavigationLink(destination: Text("SearchResultList"),
                   isActive: $shouldNavigate) {
        EmptyView()
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...