为什么有些人仍然在 jetpack compose 中使用 viewmodel?

Rez*_*ati 9 viewmodel android-viewmodel android-jetpack android-jetpack-compose

我在 YouTube 上观看了一些教程项目,其中一些制作了 viewmodel 文件并编写了一些代码,只是为了使用 viewmodel!

我们有rememberand rememberSavableand stateand recomposition and ... 在 jetpack 中组成。那么为什么还有人使用 viewmodel 呢?!它有更多的代码,使我们初学者更难以理解该项目。

我猜他们几乎没学过 XML 的视图模型,而且他们不能就这么忘记它!

在jetpack compose中是否可以以我们不需要使用viewmodel的方式编写代码?

Thr*_*ian 8

ViewModel 对于在屏幕之间传递数据或更改可组合项(如 xml 中的另一个)仍然很有用。

假设您有一个要更改 TopAppBar 的 Cart 可组合项,或者其他彼此不相关但会更改 TopAppbar 颜色或文本的可组合项。您可以使用共享 ViewModel 从不同位置进行设置并侦听 TopAppBar 可组合项内的 mutableState。

另外,remember用于通过重组来存储数据,rememberSaveable在remember之上添加配置更改。当您移至下一个屏幕并返回时,如果您的可组合项未组合,这些将被重新实例化,但只要您的应用程序处于活动状态,您就可以将数据保留在 ViewModel 中。您可以通过多种方式使用 ViewModel。

最后但并非最不重要的一点是,请记住使您的可组合项具有状态,而不是使用状态托管使您的​​可组合项更易于维护。

如果您在有状态可组合项的顶部构建层,则当子项或父项中的任何 MutableState 发生更改时,您的可组合项将进入的状态排列会增加。

跟踪从父级到子级的状态变化可能很困难。Modifier.pointerInput(keys)当我的状态没有按预期改变时,我有时会遇到这个问题。

在我看来,状态管理是 Compose 最困难的方面之一。因此,状态较少的可组合项可以更轻松地管理可组合项的内部更改