因此,Jetpack Compose 中的建议似乎是从可组合项中提升状态,使它们成为无状态、可重用和可测试,并允许在预览中轻松使用它们。\n因此,不要使用类似的东西
\n@Composable\nfun MyInputField() {\n var text by remember { mutableStateOf("") }\n TextField(value = text, onValueChange = { text = it })\n}\nRun Code Online (Sandbox Code Playgroud)\n你会像这样提升状态
\n@Composable\nfun MyInputField(text: String, onTextChange: (String) -> Unit) {\n TextField(value = text, onValueChange = onTextChange)\n}\nRun Code Online (Sandbox Code Playgroud)\n这很好,但是一些更复杂的用途呢?\n让我们假设我有一个由可组合项表示的屏幕,在 View 和 ViewModel 之间具有多种交互。该屏幕分为多个内部可组合项(例如,一个用于标题,一个用于正文,而正文又分为几个较小的可组合项)
\nviewModel()至少可以手动实例化一个)并在Preview(预览版不支持像这样创建视图模型)中使用此可组合项因此,我看到的“最干净”的解决方案是仅在最高可组合级别实例化我的视图模型,然后仅将val表示状态的 s 传递给子可组合项,并回调 ViewModel 函数。
但这很疯狂,我不会通过单独的参数将所有 ViewModel 状态和函数传递给所有需要它们的可组合项。\n将它们分组到一个data class示例中可能是一个解决方案
data class UiState(\n val …Run Code Online (Sandbox Code Playgroud) android state kotlin android-jetpack-compose android-jetpack-compose-preview