4

受信しようとしている変数が @EnvironmentObject の @Published プロパティである場合、ビューが最初にロードされるときに onReceive が起動しないようにする方法はありますか?

ビューは次のとおりです。

struct ContentView: View {
    @EnvironmentObject var appState: AppState
    
    var body: some View {
        VStack {
            Text(appState.test)
                .padding()
        }
        .onAppear() {
            appState.test = "World"
        }
        .onReceive(appState.$test) { test in
            print("Hello from onReceive: \(test)")
        }
    }
}

環境オブジェクトは次のとおりです。

public class AppState: ObservableObject {
    @Published public var test = "hello"
}

そして出力:

Hello from onReceive: hello
Hello from onReceive: World

環境オブジェクトが注入されたときに最初のものが起動されると思います。これを防ぐ方法はありますか (onAppear で設定したハックなブール以外)? 理想的には、"Hello from onReceive: World" だけを見たいと思います。これは単純な例です。実際のアプリでは、onAppear のサービスからデータをフェッチしています。環境オブジェクトでは、クリアすると onReceive を起動して他のロジックを実行し、再フェッチするというエラー状態があります。

4

1 に答える 1