0

我有一个 @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 中。

4

1 回答 1

0

问题完全是我的错。

简而言之,我在决定将其放入选项卡视图之前编写了 DataList 视图。

而且,在了解 TabView 的架构之前,错误地在 DataList 视图中调用了 TabView。

因此,当我确实将 DataListView 添加到 TabView 时,TabView 会从 DataList 视图中无休止地加载。

从 DataList 视图中删除 TabView,停止循环。

对我来说完全是愚蠢的错误,但至少我学到了一些东西。

如果他们遇到这个问题,也许我的错误会对其他人有所帮助。

于 2021-08-08T13:04:19.947 回答