SwiftUI ObservableObject 和 @ObservedObject 不保持状态



我有这样的代码:

struct MenuView : View {
@Environment(.verticalSizeClass) var sizeClass
@EnvironmentObject var model : MenuModel
@ObservedObject var items = MenuItems()
var body: some View { 
}
}

我考虑了为什么 ObservableObject 不保持它的状态(这个对象没有一个实例(,而是在每次视图重绘时重新创建它(调用 init(( 方法(,而其他一些状态发生变化。我认为每个对象一次。

但是点击该按钮会导致重新创建视图,并重新创建此观察对象。 我应该不通过属性初始化而是在父级中创建它并将其传递给构造函数吗?

如何正确传递@ObservedObject到子视图?我考虑将其传递给@Bindable属性,但它不起作用。

我正在通过按钮模型进行更改.isMenu打开@Published属性

SwiftUI 在恢复视图的状态(无论是@State还是@ObservedObject(方面有一些"魔力"。这些状态由 SwiftUI 管理,并在调用body之前恢复。

子视图可以进行初始化,但请注意,它必须如下所示:

init(foo: Foo) {
self._foo = ObservedObject(initialValue: foo)
}

您可能还希望视图扩展Equatable,以帮助差异。

我在这里写了更多关于状态的奇怪事情:https://samwize.com/2020/04/30/a-few-things-about-state/

相关内容

  • 没有找到相关文章

最新更新