小编Mat*_*lis的帖子

Jetpack Compose 状态提升、预览和 ViewModel 最佳实践

因此,Jetpack Compose 中的建议似乎是从可组合项中提升状态,使它们成为无状态、可重用和可测试,并允许在预览中轻松使用它们。\n因此,不要使用类似的东西

\n
@Composable\nfun MyInputField() {\n    var text by remember { mutableStateOf("") }\n    TextField(value = text, onValueChange = { text = it })\n}\n
Run Code Online (Sandbox Code Playgroud)\n

你会像这样提升状态

\n
@Composable\nfun MyInputField(text: String, onTextChange: (String) -> Unit) {\n    TextField(value = text, onValueChange = onTextChange)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这很好,但是一些更复杂的用途呢?\n让我们假设我有一个由可组合项表示的屏幕,在 View 和 ViewModel 之间具有多种交互。该屏幕分为多个内部可组合项(例如,一个用于标题,一个用于正文,而正文又分为几个较小的可组合项)

\n
    \n
  • 您无法在可组合项中创建 ViewModel(viewModel()至少可以手动实例化一个)并在Preview(预览版不支持像这样创建视图模型)中使用此可组合项
  • \n
  • 在内部可组合项中使用 ViewModel 将使它们成为有状态的,不是吗?
  • \n
\n

因此,我看到的“最干净”的解决方案是仅在最高可组合级别实例化我的视图模型,然后仅将val表示状态的 s 传递给子可组合项,并回调 ViewModel 函数。

\n

但这很疯狂,我不会通过单独的参数将所有 ViewModel 状态和函数传递给所有需要它们的可组合项。\n将它们分组到一个data class示例中可能是一个解决方案

\n
data class UiState(\n  val …
Run Code Online (Sandbox Code Playgroud)

android state kotlin android-jetpack-compose android-jetpack-compose-preview

13
推荐指数
1
解决办法
3518
查看次数