将 mutablestate 传递给可组合函数是否最优?

Is passing mutablestate to composable function optimal?

提问人:MH-Rouhani 提问时间:7/27/2023 更新时间:7/27/2023 访问量:38

问:

喜欢这个:

@Composable
fun TextEdit(textState: MutableState<String>) {
    val text by textState
    TextField(onValueChange = {
        text = it
    }, value = text)
}

对于不必要的重组,它是最佳选择吗?

人造人 android-jetpack-compose 状态管理 可组合 可变状态

评论


答:

1赞 Ayman Ait 7/27/2023 #1

这仍然会触发不必要的重组,而是尝试使用状态提升的概念,在代码应该位于的位置:

@Composable
fun TextEdit(textState: String) {
    
    TextField(onValueChange = {
        textState = it
    }, value = textState)
}

以下是要遵循的最佳实践

您应该将 UI 状态提升到所有之间的最低共同祖先 读取和写入它的可组合项。您应该保持状态最接近 到它被消费的地方。从国有企业,向消费者公开 不可变状态和事件来修改状态。

最低的共同祖先也可以在组合之外。为 例如,在 ViewModel 中提升状态时,因为业务逻辑是 涉及。

评论

0赞 MH-Rouhani 7/28/2023
你确定它会触发不必要的重组吗?如何?