簡體   English   中英

防止 NavigationLink 處理 state 變量

[英]Prevent NavigationLink from processing state variable

我不喜歡我的標題,但這是我能想到的最好的。 基本上,我有兩個視圖: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 變量中獲取核心數據。

當用戶點擊“Go”時,我希望提取只發生一次。 有沒有辦法做到這一點?

這是預期的行為,因此通常您應該重新設計 SearchResultList,但這可以作為一種解決方法:

在您的輸入上聲明一個 state:

@State var shouldNavigate = false

然后將按鈕與導航鏈接分開。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM