据我了解。
remember 只是缓存计算结果以在组合之间保留结果实例。任何物体。和MutableState 实例。这就是它有用的原因。
val text = remember{ "" }
只缓存空字符串。
val text = mutableStateOf("")
创建MutableState 和compose 观察它的值,但不缓存MutableState 实例,所以它会在下一次重组时重新创建(当然如果重组会发生在这个地方)
例如:
val state: MutableState<Int> = mutableStateOf(1)
println(state.toString())
Text(
modifier = Modifier.clickable { state.value += 1 },
text = "${state.value}",
)
文本将始终为 1,因为每次重组都会重新创建 state,并且输出将是:
MutableState(value=1)@227069120
MutableState(value=1)@104526071
MutableState(value=1)@915621104
MutableState(value=1)@580489706
remember 缓存 MutableState 对象并在每次重组时保持相同的实例
val state: MutableState<Int> = remember { mutableStateOf(1) }
println(state.toString())
Text(
modifier = Modifier.clickable { state.value += 1 },
text = "${state.value}",
)
按预期工作。
MutableState(value=2)@1121832406
MutableState(value=3)@1121832406
MutableState(value=4)@1121832406
MutableState(value=5)@1121832406
记住(键)
val key = remember { 0 }
var state by remember(key) { mutableStateOf(1) }
println(state.toString())
Text(
modifier = Modifier.clickable { state += 1 },
text = "${state}",
)
即使key 没有改变,也像上面的例子一样工作。这是因为在 MutableState 的情况下,缓存的不是值,而是 MutableState 的实例本身带有 value 字段,它会发生变化。
更改 key 值将重新创建 MutableState 实例