Android Compose 与 XML / 命令式框架中的状态

时间:2021-05-24 18:50:34

标签: android android-jetpack-compose

我正在通过 Compose 途径,我一直看到所有这些都强调状态提升。与旧范式相比,这在新的 Compose 框架中是否在某种程度上更相关?总的来说,这似乎只是一种很好的编程技术。我担心我错过了 Composable 系统中的一个特殊优势。

1 个答案:

答案 0 :(得分:0)

ActivityFragment 的角度来看,它们几乎相同。进入状态流,ActivityFragment 需要通过更新其内容来对更改做出反应。

然而,在 Compose 中,可组合项本身就是 UI 的小片段,可以这么说。在 Compose 中,您可以任意将 UI 分成越来越小的部分,每个部分都对状态变化做出反应。正是在这种分解(可以这么说)中,状态提升变得很重要,并允许这些较小的 UI 部分可重用。即使您使用 TextButton,它们也只是可组合的函数,用于布局和绘制文本或将用户输入映射到点击事件等。

如果状态已经在 UI 模型中,那么它已经被提升了。不需要额外的吊装。状态提升只有在可组合有自己的信息模型时才重要。例如,TextField 将其状态作为参数,而不是在内部创建和保存它。这允许状态直接保存在 UI 模型中,而不需要与其同步。模型可以决定当状态改变时,TextField 只是请求状态改变,它不控制它。传统上,TextField 将拥有自己的文本内部模型,并在值更改时仅发送 onChange 通知。这意味着该字段的值至少有两种模型,一种由控件持有,另一种由应用程序模型持有。同步这些可能很棘手。

允许组合状态的提升允许有一个单一的事实来源,即应用程序模型,而不是几个状态都需要同步到一个值。 Compose 不规定模型是什么或如何存储它,它只需要知道值何时发生变化,以便知道何时更新 UI。