簡體   English   中英

如何在不點擊按鈕的情況下進行網絡請求

[英]How to do network request without clicking at button

我有一個文本字段,當我寫 smth 時我需要它。 在文本字段中,它無需單擊任何按鈕即可向服務器發送請求。 例如,如果我發送的文本與服務器的文本相同,它會打印該文本。 我正在使用 SwiftUI 並結合。 下面是我的代碼。

@State var cancellable: AnyCancellable?
     .onReceive(Just($homePageVM.orderNumber)) { res in
            if !homePageVM.orderNumber.isEmpty {
                cancellable = homePageVM.orderNumber
                    .publisher
                    .receive(on: RunLoop.main)
                    .sink(receiveCompletion: { completion in
                        print(completion)
                    }, receiveValue: { value in
                        homePageVM.getVoucherInfo { result in
                            if homePageVM.orderNumber == homePageVM.getVoucherInfoModel?.orderNumber {
                                print(result)
                            }
                        }
                    })
            }
        }

我正在使用onreceive ,因為每次更改文本時都需要發送數據。 但結果我收到了一個無休止的循環。 每次更改文本時,如何僅發送一次數據? 請幫我。

onReceiveJustsink一起使用很奇怪,使用 Combine 根本沒有意義。 onChange修飾符將取代所有這些。 但是,只需使用多個 View 結構和task修飾符即可完成您需要的最佳方式,例如

struct View1: View {

    ...

    var body: some View {
        View2(orderNumber: model.orderNumber)
    }
}

struct View2: View {
    let orderNumber: Int
    @State var result: String?

    // body called when any of the properties change
    var body: some View {
        Text(result ?? "No result")
        .task(id: orderNumber) { newOrderNumber in
            result = await fetchVoucherInfo(orderNumber: newOrderNumber)
        } // The `task` is started if the orderNumber has changed.
    }
}

暫無
暫無

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

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