我有一个 @ObservableObject 我要传递给一个视图,使用:
TabView()
.environmentObject(stateManager)
在这种情况下,我正在使用:
@EnvironmentObject var stateManager: StateManager
我正在尝试将一些数据向下传递到更深的视图中,该视图将在列表中呈现该数据。
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 无休止地渲染。
我也尝试过以相同的结果传递整个状态对象和其他参数/参数组合,但我基本上是在猜测这一点。
正在使用的设置是在 TabView 渲染之前设置的items
,并且它们在任何时候都不会发生变异,所以我不确定是什么触发了重新渲染。
此问题仅在传递到“第三”级别时发生。换句话说,如果我在 TabView 中渲染列表,就没有无穷无尽的重新渲染。
同样,有 99% 的可能性是我不了解数据应该如何流动,因此任何关于将这些数据向下传递而无需进行无休止的重新渲染的技巧将不胜感激。
郑重声明,这一切都发生在 Xcode 13 beta 4 中。