0

以下を使用して、ビューに渡す @ObservableObject があります。

TabView()
  .environmentObject(stateManager)

そのビューでは、私は使用しています:

@EnvironmentObject var stateManager: StateManager

私はいくつかのデータを 1 つのビューに渡して、そのデータをリストにレンダリングするビューに渡そうとしています。

var body: some View {
    ZStack {
        Color("bgColor").ignoresSafeArea()
        TabView {
            DataListView(
                items: stateManager.items
            )
                .tabItem {
                    Label("Items", systemImage: "list.bullet")
                }
        }
    }
    .onAppear{
        print("Tab view has appeared!") // <= endless loop
    }
}

DataListView (上記) には、次のものがあります。

var items: [Item]

私も使用してみました:

items: $stateManager.items

@Binding var items: [Item]

それぞれ tabView と DataListView で

何らかの理由で、おそらく私自身の無知が原因で、Tabview は際限なくレンダリングされます。

また、状態オブジェクト全体と引数/パラメーターの他の組み合わせを同じ結果で渡そうとしましたが、この時点では基本的に推測しています。

使用されているのitemsは TabView レンダリングの前に設定されており、どの時点でも変更されていないため、何が再レンダリングをトリガーしているのかわかりません。

この問題は、「3 番目」のレベルに渡すときにのみ発生します。つまり、TabView でリストをレンダリングした場合、エンドレスな再レンダリングはありません。

繰り返しますが、99% の確率でデータがどのように流れるかを理解していない可能性があるため、無限の再レンダリングなしでこのデータを渡すためのヒントをいただければ幸いです。

記録として、これはすべて Xcode 13 beta 4 で発生しています。

4

1 に答える 1