@EnvironmentObject在传递给多个控制器时被多次跟踪的问题是由于在SwiftUI中,@EnvironmentObject属性包装器会将被注入的对象绑定到视图层次结构中的所有子视图中。当一个@EnvironmentObject对象被传递给多个控制器时,每个控制器都会独立跟踪该对象的状态变化。
这个问题的解决方案是使用@ObservedObject属性包装器来替代@EnvironmentObject。@ObservedObject用于将外部对象传递给单个控制器,并且只有在该对象发生更改时,控制器才会被重新加载。
以下是一个示例代码,展示了如何使用@ObservedObject来解决该问题:
import SwiftUI
class MyDataObject: ObservableObject {
@Published var data: String = "Initial Data"
}
struct ContentView: View {
@ObservedObject var dataObject = MyDataObject()
var body: some View {
VStack {
ChildView(dataObject: dataObject)
ChildView(dataObject: dataObject)
}
}
}
struct ChildView: View {
@ObservedObject var dataObject: MyDataObject
var body: some View {
Text(dataObject.data)
}
}
在上述示例中,使用@ObservedObject将MyDataObject传递给每个ChildView。当dataObject中的data属性发生更改时,与该对象相关联的视图将被重新加载,而其他ChildView不会重新加载。
对于以上问题的解决方案,腾讯云没有特定的产品或链接可以推荐,因为这只是SwiftUI框架中的一般开发问题。
领取专属 10元无门槛券
手把手带您无忧上云