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

标签 android-jetpack-compose viewmodel android-jetpack android-viewmodel jetpack

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

我们有 rememberrememberSavablestaterecomposition 和 ... 在 Jetpack Compose 中。那么为什么还有人使用 viewmodel 呢?! 这是一些更多的代码,使我们初学者更难以理解该项目。

我猜他们很难学习 XML 的 View 模型,他们不能忘记它!

在 jetpack compose 中是否可以以一种我们无论如何都不需要使用 viewmodel 的方式编写代码?

最佳答案

ViewModel 对于在屏幕之间传递数据或更改 Composable(如在 xml 中)仍然很有用。

假设您有一个购物车可组合项,您希望从中更改 TopAppBar 或其他彼此不相关但更改 TopAppbar 颜色或文本的可组合项。您可以使用共享的 ViewModel 从不同位置进行设置,并在 TopAppBar 可组合项中监听 mutableState。

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

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

如果您在有状态可组合项之上构建层,则当子项或父项中的任何 MutableState 发生变化时,您的可组合项会增加状态的排列。

跟踪从 parent 到 child 的状态变化可能很困难。当我的 Modifier.pointerInput(keys) 状态未按预期更改时,我有时会遇到此问题。

在我看来,状态管理是 Compose 中最困难的方面之一。因此,状态越少的可组合项越容易管理可组合项的内部更改

关于android-jetpack-compose - 为什么有些人仍然在 jetpack compose 中使用 viewmodel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73863771/

相关文章:

kotlin - Jetpack Compose 桌面 – MaterialTheme.colors.background 不工作

MVVM - View 模型/模型绑定(bind)

android - 为什么 fragment 泄漏中的 Viewmodel 实例

android - 如何使用新的 androidx.lifecycle :*:2. 2.0-alpha01 获取 lifecycle.coroutineScope

android - BottomNavigationView.setupWithNavController 不工作

android - 将 Jetpack-Compose 添加到项目使用 API below 21

android - 未解析的引用 : DrawImage

android - 如何使用 jetpack compose 以编程方式在按钮单击时打开外部 url?

android - 为什么在 Jetpack Compose 项目中不显示列表项目图像?

wpf - 如何从 ViewModel 访问 MetroWindow 的 ShowMessageAsync 方法