SwiftUI:传递给子视图的状态没有收到更新?

问题描述

我有一个带有列表的 MasterView
通过单击项目,会显示 DetailView
我正在通过 NavigationLink 以标准 SwiftUI 方式实现这一点。

我将 detailState 作为参数传递给 DetailView。

我期待在显示 DetailView 屏幕时, 对 detailState 的任何更改仍会触发对 DetailView 的更新。
(首先显示“正在加载...”屏幕,然后在完全加载时显示数据)

但这似乎没有发生。
如果 detailState 值发生变化,则不会触发视图更新。
(数据完全加载后仍显示“loading...”信息)

struct MasterView: View {
    var state : AppState
    let model : Model
    
    var body: some View {
        NavigationView {
            List {
                Section(header: MasterListHeader(masterState: state.masterState)) {
                    ForEach (state.masterState.itemsList,id: \.nome) { row in
                        NavigationLink(destination: DetailView(detailState: state.detailState)) {
                                MasterRow(row: row,model: model)
                        }
                    }
                }
            }
        }
    }
}


struct DetailView: View {
    var detailState: DetailState
    let model : Model
    
    var body: some View {
        vstack {
            if (detailState.itemDetails.isEmpty) {
                LoadingScreen()
            } else {
                DataScreen()
            }
        }.onAppear {
            model.loadDetailItem(nome: detailState.itemName)
        }
    }
}

这里是定义源对象的地方:

class Appviewmodel: ObservableObject {
    let coreModel : Model = Model()
    @Published var appState : AppState = AppState()
    
    init() {
        coreModel.onChange { newState in
            self.appState = newState
        }
    }
}


@main
struct iosApp: App {
    @StateObject var vm = Appviewmodel()

    var body: some Scene {
        WindowGroup {
            ContentView(state: vm.appState,model: vm.coreModel)
        }
    }
}

struct ContentView: View {
    var state : AppState
    let model : Model

    var body: some View {
        MasterView(state: state,model: model)
    }
}

确保 DetailViewdetailState 的变化做出反应的最佳设计是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...