@State 的限制
Posted
技术标签:
【中文标题】@State 的限制【英文标题】:Limitation Of @State 【发布时间】:2019-07-20 00:55:29 【问题描述】:我在一些文章中看到@state 有很多限制
我们不应该将它与复杂的模型一起使用,最好将它与字符串、布尔值等简单属性一起使用。 我们应该在视图本身中使用它。我尝试制作一个结构模型并在内容视图(ParentView)中用@state 标记它,并通过用@binding 包装它将此模型传递给它的子视图,它工作得很好, 所以我不明白为什么我们仍然需要@objectbinding,因为我们可以将相同的值传递给这些子视图,如果一个改变,其他的也会改变?或者@objectbinding 解决的@state 的限制是什么?
【问题讨论】:
【参考方案1】:我推荐你看WWDC 2019 session: Data Flow in SwiftUI。解释得很好。它描述了在哪些情况下@State 是完全可以接受的,而在哪些情况下需要 ObjectBinding/EnvironmentObject。会议只有 37 分钟,但它将是您对绑定的理解的前后。请务必观看,从长远来看,它会节省时间。
这一切都归结为了解数据的“真实来源”在哪里。这也是视频中解释的概念。简而言之,事实的来源是您的数据诞生了。如果您的变量的数据可以从其他变量导出,那么它不是事实来源。
@State
和 @BindableObject
有什么区别?
@State
:它是视图本地的。它必须是值类型(例如,结构、整数、字符串、数组等),并且其存储由框架管理。
@BindableObject
:它在视图之外,它是一个参考值(例如,一个类),它的存储由你管理,让你更灵活地实现自己的逻辑。
请注意,@State
变量在为您的应用制作原型时也非常有用。例如,如果您正在处理视图的布局,您最初可以使用@State
变量来使事情变得更容易。一旦您的视图符合您的要求,您就可以专注于创建您的 @BindableObject
并替换您的 @State
。
【讨论】:
以上是关于@State 的限制的主要内容,如果未能解决你的问题,请参考以下文章
对于 YARN 中的单个队列,如何将 state=RUNNING 中的 spark 应用程序数量限制为 1?
千分尺暴露执行器指标 vs kube-state-metrics vs metrics-server 以设置 pod 请求/限制
8. react 基础 - props 默认值和类型限制 与 Props , State , render 函数 关系