在jetpack compose中使用非本地状态?

时间:2021-01-18 23:29:09

标签: kotlin android-jetpack-compose

可以使用 Composable 函数的非本地状态吗?一个例子是一个 Composable,它显示了一个文本,其中一个字符串取自 MutableState,存储为通过环境检索的对象的成员,如下所示:


data class ServiceX (
   val whateverString: MutableState<String>("meow")
)


@Composable
fun Whatever() {
   val serviceX = AmbientServiceX.current
   Text(serviceX.whateverString)
}

whateverString 发生变化时,Composable 函数会重新绘制吗?这有什么问题吗?

1 个答案:

答案 0 :(得分:2)

技术上应该可行,但您可能希望将 areas 更改为 MutableState,这会在幕后进行更多的创作。

但我建议在撰写中避免这样的模式。一般来说,环境应该很少使用,因为环境使组合物变得“神奇”,因为值来自何处或触发值更改的位置并不明显。它本质上使您的代码很难调试。

倾向于创建独立组件,因为这些组件更易于构建和维护 - 并且是组合的最大好处。

mutableStateOf