将可变状态传递给可组合函数是否最优?

问题描述 投票:0回答:1

像这样:

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

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

android android-jetpack-compose state-management composable mutablestateof
1个回答
1
投票

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

@Composable
fun TextEdit(textState: String, onTextStateChange: ()-> Unit) {
    
    TextField(onValueChange = onTextStateChange, value = textState)
}

这是要遵循的最佳实践

您应该将 UI 状态提升到所有状态之间的最低公共祖先 读取和写入它的可组合项。你应该保持状态最接近 到消费的地方。来自国家所有者,暴露给消费者 不可变状态和修改状态的事件。

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

© www.soinside.com 2019 - 2024. All rights reserved.