最近我在编写时遇到了一个remember
的问题;我有两个简单的、可组合的函数,如下所示:
@Composable
fun foo() {
var x = remember { 1 }
x += 1
Text("$x")
}
@Composable
private fun MainScreen() {
var state by remember { mutableStateOf(1) }
Column {
foo()
Button(onClick = { state += 1 }) {
Text("Update Offer $state")
}
}
}
我希望当点击按钮时,foo()
重新组合,x
增加,但这不起作用,x
总是2。有人能解释为什么它不像我预期的那样起作用吗?
2条答案
按热度按时间nimxete21#
您使用remember将x的初始值存储为1。Remember是一个可组合的函数,它返回一个在重组过程中被记住的值。这意味着x不会改变,除非键改变。在您的例子中,键总是1,所以x总是1 + 1 = 2。
对于x,应该使用mutablestate而不是remember。Mutablestate是一种存储可以更改的值并在更改时触发重组的方法。您可以使用mutableStateOf创建可变状态并委托状态的getter和setter。
hzbexzde2#
正如Ammirhossein所说,问题是
remember
使用引用,remember { 1 }
总是返回1;为了解决这个问题,我稍微修改了代码如下: