查看 Codelab 的基本教程,其中有一个片段可以在单击时增加按钮上的计数器
@Composable
fun MyScreenContent(names: List<String> = listOf("Android", "there")) {
val counterState = remember { mutableStateOf(0) }
Column(modifier = Modifier.fillMaxHeight()) {
Column(modifier = Modifier.weight(1f)) {
for (name in names) {
Greeting(name = name)
Divider(color = Color.Black)
}
}
Counter(
count = counterState.value,
updateCount = { newCount ->
counterState.value = newCount
}
)
}
}
@Composable
fun Counter(count: Int, updateCount: (Int) -> Unit) {
Button(
onClick = { updateCount(count + 1) },
colors = ButtonConstants.defaultButtonColors(
backgroundColor = if (count > 5) Color.Green else Color.White
)
) {
Text("I've been clicked $count times")
}
}
很清楚remember { mutableStateOf(0) }
存储状态/值。我的问题是,remember 在幕后的作用是什么。使用var count = remember { 0 }
or mutableStateOf(0)
没有remember不会增加价值。
fun MyScreenContent(names: List<String> = listOf("Android", "there")) {
var count = remember { 0 }
Column(modifier = Modifier.fillMaxHeight()) {
Column(modifier = Modifier.weight(1f)) {
for (name in names) {
Greeting(name = name)
Divider(color = Color.Black)
}
}
Counter(
count = count,
updateCount = { newCount ->
count = newCount
}
)
}
}
上面的代码片段不会更新打印的值Text
,确实记得只适用于MutableState
?
remember
- 允许您记住先前重组调用的状态,仅此而已。
因此,如果您在初始运行时随机化颜色。随机颜色仅计算一次,然后在需要重新合成时重复使用。
因此,
remember
= 存储该值以防调用重组。
现在,第二件重要的事情是知道什么时候reCompose
实际上应该被触发,并且可变状态会提供帮助。
mutablestate
= 存储值,如果我更新值触发器,则使用此数据重构所有元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)