gpt4 book ai didi

android - 如何从外部更新可组合状态?

转载 作者:行者123 更新时间:2023-12-04 23:42:34 25 4
gpt4 key购买 nike

例如,它在可组合函数中使用 state{}。

@Composable
fun CounterButton(text: String) {
val count = state { 0 }

Button(
modifier = Modifier.padding(8.dp),
onClick = { count.value++ }) {
Text(text = "$text ${count.value}")
}
}
但是如何更新可组合函数之外的值呢?
我发现了一个 mutableStateOf() 函数和 MutableState 接口(interface),可以在可组合函数之外创建,但在值更新后没有效果。
我尝试的无效示例:
private val timerState = mutableStateOf("no value", StructurallyEqual)

@Composable
private fun TimerUi() {
Button(onClick = presenter::onTimerButtonClick) {
Text(text = "Timer Button")
}
Text(text = timerState.value)
}

override fun updateTime(time: String) {
timerState.value = time
}
撰写版本为 0.1.0-dev14

最佳答案

您可以通过受控可组合函数的参数公开状态并从控制可组合函数外部实例化它来实现。
代替:

@Composable
fun CounterButton(text: String) {
val count = remember { mutableStateOf(0) }
//....
}
您可以执行以下操作:
@Composable
fun screen() {

val counter = remember { mutableStateOf(0) }

Column {
CounterButton(
text = "Click count:",
count = counter.value,
updateCount = { newCount ->
counter.value = newCount
}
)
}
}

@Composable
fun CounterButton(text: String, count: Int, updateCount: (Int) -> Unit) {
Button(onClick = { updateCount(count+1) }) {
Text(text = "$text ${count}")
}
}
通过这种方式,您可以使调用它的函数可以控制内部状态。
它被称为 状态吊装 .

关于android - 如何从外部更新可组合状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62679699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com