首页 > 解决方案 > 何时重新创建 SwiftUI 中的工作表?

问题描述

有谁知道什么时候.sheet应该重新渲染关闭?是否真的应该在整体中的任何东西body导致更新时这样做,即使它不在层次结构中的远程?

例如,未更新cartItemModal@State属性在哪里:

    var body: some View {
        VStack {
            theCartView
            // even putting the sheet outside of the cart view entirely, it still gets re-rendered
            Text("").sheet(item: $cartItemModal) { (productWithCartItem) -> QuickAddView in
                QuickAddView(viewModel: QuickAddViewModel(productDetails: productWithCartItem, cartAPIProvider: self.cartAPIProvider))
            }
        }
    }

我的模态中的控件可以更新底层列表中的数据驱动theCartView。数据实际上并不影响我的QuickAddView模态,它是用它自己的结构呈现的。然而,该闭包再次被调用,我的模态被重新渲染。


在此处添加完整示例:

https://gist.github.com/sprynmr/66811b088ac50d9f297471d5c70d0eb3


我认为我的问题归结为:@State视图中的瞬态属性与底层数据更改无关,或者通过.sheet. 如果要在更新中的任何内容时随时重新创建这些内容,那么body很多人可能会为他们的瞬态视图状态被重置而苦苦挣扎。

考虑一个计时器触发,它从服务器获取更新并更新显示 a 的列表.sheet。工作表将被重新创建@State并将被重置。

标签: iosswiftswiftui

解决方案


您的工作表不会重新渲染,但每次您的工作表绑定到的任何内容发生突变时,都会重新评估它。这是预期的行为。


推荐阅读