在 Jetpack Compose 中使用非本地状态?
Use non-local state in jetpack compose?
可以使用可组合函数中的非本地状态吗?一个示例是一个 Composable,它显示一个文本,其中一个字符串取自 MutableState
,存储为通过 Ambient 检索的对象的成员,如下所示:
data class ServiceX (
val whateverString: MutableState<String>("meow")
)
@Composable
fun Whatever() {
val serviceX = AmbientServiceX.current
Text(serviceX.whateverString)
}
当 whateverString
发生变化时,可组合函数是否会重新绘制?这有什么问题吗?
它在技术上应该可行,但您可能想将 MutableState
更改为 mutableStateOf
,这样可以在后台提供更多 compose 功能。
但我建议在撰写时避免这样的模式。一般来说,Ambients 应该很少使用,因为 Ambients 使可组合项 'magic' 不明显,值的来源或触发值更改的位置不明显。它实质上使您的代码很难调试。
倾向于创建独立的组件,因为它们更易于构建和维护 - 并且是组合的最大好处。
@Composable
fun Whatever(whateverString: String) {
Text(whateverString)
}
可以使用可组合函数中的非本地状态吗?一个示例是一个 Composable,它显示一个文本,其中一个字符串取自 MutableState
,存储为通过 Ambient 检索的对象的成员,如下所示:
data class ServiceX (
val whateverString: MutableState<String>("meow")
)
@Composable
fun Whatever() {
val serviceX = AmbientServiceX.current
Text(serviceX.whateverString)
}
当 whateverString
发生变化时,可组合函数是否会重新绘制?这有什么问题吗?
它在技术上应该可行,但您可能想将 MutableState
更改为 mutableStateOf
,这样可以在后台提供更多 compose 功能。
但我建议在撰写时避免这样的模式。一般来说,Ambients 应该很少使用,因为 Ambients 使可组合项 'magic' 不明显,值的来源或触发值更改的位置不明显。它实质上使您的代码很难调试。
倾向于创建独立的组件,因为它们更易于构建和维护 - 并且是组合的最大好处。
@Composable
fun Whatever(whateverString: String) {
Text(whateverString)
}