阻止NavigationLink处理状态变量

时间:2019-10-19 12:40:55

标签: ios swiftui

我不喜欢我的头衔,但这是我能想到的最好的。基本上,我有两个视图:SearchInput和SearchResultList。用户使用SearchInput输入搜索词,点击“ Go”,然后使用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 :(得分:0)

这是预期的行为,因此通常应该重新设计SearchResultList,但这可以作为一种解决方法:

在输入中声明状态:

@State var shouldNavigate = false

然后将按钮从导航链接中分离出来。

Group {         
    Button("Go") {
        self.shouldNavigate = true
    }
    NavigationLink(destination: Text("SearchResultList"),
                   isActive: $shouldNavigate) {
        EmptyView()
    }
 }