为什么 jetpack-compose 状态提升使用回调?

d_i*_*_iv 2 kotlin android-jetpack-compose

这个关于 jetpack-compose 中状态提升的教程说:

通过向 OnboardingScreen 传递函数而不是状态,我们使该可组合项更具可重用性,并保护状态不被其他可组合项改变。一般来说,它使事情变得简单。

传递回调函数如何比直接传递状态更好地实现这些既定目标?

Adi*_*rzi 5

这是因为可组合函数现在是“无状态的”,这意味着它不会改变其范围内的任何内容。

这很简单,因为:

  1. 对于每个输入,该函数具有相同的输出(因为它仅依赖于其输入并且不会改变外部的任何内容)。

  2. 它变得非常可测试(因为 1)。

  3. 它赋予任何使用它的人权力。他们可以随心所欲地“改变”状态。想象一下一个TextField(text: String, onTextChanged: (text: String) -> Unit). 您可以根据需要更改状态(例如,从字符串中删除任何数字,然后将其应用到您的状态)。如果TextField处理状态本身,它总是会将状态更改为实际文本(并且您将需要针对上述场景的另一种机制)。

这为您的可组合项带来了简单性,因为您不必担心您的可组合项(例如TextField)如何更改状态。