SwiftUI绑定不适用于子层次结构

丹德佩德

我需要在一个孩子的一个孩子超时后刷新ContentView。由于某些原因,此代码不起作用:

struct ContentView: View {
    @State private var returnToHome: Bool = false

    var body: some View {
        TabView([
            TabBarItem(view: HomeView(),
                       image: Image("home_icon"),
                       title: "home"),
            TabBarItem(view: AskView(returnToHome: self.$returnToHome),
                       image: Image("ask_icon"),
                       title: "ask us"),
            TabBarItem(view: JobsView(),
                       image: Image("jobs_icon"),
                       title: "jobs"),
            TabBarItem(view: MeetingView(),
                       image: Image("meeting_icon"),
                       title: "meeting"),
            TabBarItem(view: MoreView(),
                       image: Image("more_icon"),
                       title: "more")
        ])
    }
}

struct AskView: View {
    @Binding var returnToHome: Bool

    var body: some View {
        AskDone(returnToHome: self.$returnToHome)
    }
}

struct AskDone: View {
    @Binding var returnToHome: Bool

    var body: some View {
            Text("done!")
        }
        .onAppear {
            DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
                self.returnToHome = true
            }
        }
    }
}

执行了DispatchQueue中的代码,但它不会影响ContentView @State。我也尝试通过Binding,但是没有成功。可能是什么问题?

他的脾气

据我了解,“视图”的任何状态更改时,“主体”都应随时更新。我错了吗?

从理论上讲是可以的,但已正式宣布SwiftUI渲染引擎已进行了优化,以在视图层次结构未发生任何更改的情况下不进行任何不需要的重新构建/重新绘制,这实际上是非常好的。您的情况没有改变,因此没有更新。你必须加入一些依赖bodyreturnToHome

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章