我正在通过 Compose 途径,我一直看到所有这些都强调状态提升。与旧范式相比,这在新的 Compose 框架中是否在某种程度上更相关?总的来说,这似乎只是一种很好的编程技术。我担心我错过了 Composable 系统中的一个特殊优势。
答案 0 :(得分:0)
从 Activity
或 Fragment
的角度来看,它们几乎相同。进入状态流,Activity
或 Fragment
需要通过更新其内容来对更改做出反应。
然而,在 Compose 中,可组合项本身就是 UI 的小片段,可以这么说。在 Compose 中,您可以任意将 UI 分成越来越小的部分,每个部分都对状态变化做出反应。正是在这种分解(可以这么说)中,状态提升变得很重要,并允许这些较小的 UI 部分可重用。即使您使用 Text
或 Button
,它们也只是可组合的函数,用于布局和绘制文本或将用户输入映射到点击事件等。
如果状态已经在 UI 模型中,那么它已经被提升了。不需要额外的吊装。状态提升只有在可组合有自己的信息模型时才重要。例如,TextField
将其状态作为参数,而不是在内部创建和保存它。这允许状态直接保存在 UI 模型中,而不需要与其同步。模型可以决定当状态改变时,TextField
只是请求状态改变,它不控制它。传统上,TextField
将拥有自己的文本内部模型,并在值更改时仅发送 onChange
通知。这意味着该字段的值至少有两种模型,一种由控件持有,另一种由应用程序模型持有。同步这些可能很棘手。
允许组合状态的提升允许有一个单一的事实来源,即应用程序模型,而不是几个状态都需要同步到一个值。 Compose 不规定模型是什么或如何存储它,它只需要知道值何时发生变化,以便知道何时更新 UI。