以下を使用して、ビューに渡す @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 で発生しています。