【发布时间】:2022-01-19 00:45:32
【问题描述】:
假设我有这样的观点:
struct Parent: View {
var data: Int
var body: some View {
Child(state: ChildState(data: data))
}
}
struct Child: View {
@StateObject var state: ChildState
var body: {
...
}
}
class ChildState: ObservableObject {
@Published var property: Int
...
init(data: Int) {
// ... heavy lifting
}
}
我的理解是 Child 的 init 方法不应该做任何繁重的计算,因为它可以被 SwiftUI 一遍又一遍地调用。因此,应该在标有@StateObject 装饰器的ChildState 类中完成繁重的工作,以确保它在渲染周期中持续存在。问题是,如果 Parent.data 发生变化,我如何向下传播,以便 ChildState 也知道更新?
也就是说,我确实想要ChildState 的新实例,或者当且仅当Parent.data 发生变化时更新ChildState。否则,ChildState 不应更改。
【问题讨论】:
-
在 Parent 中将其作为
@StateObject属性,然后将其传递给作为@ObservedObject属性的子视图