ios - 防止 NavigationLink 处理状态变量

标签 ios swiftui

我不喜欢我的标题,但这是我能想到的最好的标题。基本上,我有两个 View :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 中输入字符时,绑定(bind)状态变量 searchTerm 都会更新,这会导致 NavigationLink 重新评估其目的地 - 这会导致在计算的 searchResult 变量中获取核心数据.

我希望只在用户点击“Go”时进行一次提取。有办法实现吗?

最佳答案

这是预期的行为,因此一般来说您应该重新设计您的 SearchResultList,但这可以作为解决方法有所帮助:

声明您的输入的状态:

@State var shouldNavigate = false

然后将按钮与导航链接分开。

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

关于ios - 防止 NavigationLink 处理状态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58463779/

相关文章:

objective-c - performSelectorOnMainThread中的WaitUntilDOne有什么意义?

objective-c - 将数据从 Viewcontroller 传递到 Label

ios - iOS 7 中的 UIPickerView 按钮选择器问题

ios - UITextView 中的自动换行检测

ios - SwiftUI 图像组件在调整大小时缩小

swift - 在 RealityKit 中从场景中删除实体

ios - SwiftUI ButtonStyle - 如何检查按钮是否已禁用或启用?

ios - 文本字段中限制字符的问题

ios - SwiftUI:获取动态背景颜色(暗模式或亮模式)

ios - 在 SwiftUI 中更改 slider 拇指