简短回答:
当您想记住该值时,可以在 Android Compose 中使用 Remember。
长答案:
当状态变量发生变化然后触发重组时,该机制的工作原理如下,并且您会在手机上看到更新的屏幕。
例如:
Case 1
@Compose
fun MyComposable(){
var text: String = ""
TextField(
value = text,
onValueChange = { newText ->
text = newText
}
}
在这种情况下:当您按下键盘上的按钮时,不会发生任何事情,因为您没有撰写机制查找以更新屏幕的状态值。在这种情况下,当您在键盘上按下字母时,什么也不会发生。
Case 2
@Compose
fun MyComposable(){
var text by mutableStateOf("")
TextField(
value = text,
onValueChange = { newText ->
text = newText
}
}
在本例中,您有一个状态变量(在我们的例子中是一个字符串),当您按下键盘上的按钮时,就会发生重组。所以该机制说嘿,看看值已经改变了,让我用这个可组合项重新组合屏幕,然后块再次运行,并且text
变量默认为空字符串(""
) 再次。因此,即使发生了重组,您也会在屏幕上看到相同的内容。
Case 3
@Compose
fun MyComposable(){
var text by remember { mutableStateOf("") }
TextField(
value = text,
onValueChange = { newText ->
text = newText
}
}
在这种情况下,假设您要输入数字10
在你的键盘上。你点击1
机制看到状态值已经改变。然后,当处于文本值时,机制不会将其默认为,再次执行可组合函数""
但保留或记住1
你之前按过。所以你看1
在屏幕上,您可以按0
最后看到10...
So when is useful to use remember?
由于可组合项的块可能会以意想不到的方式运行多次,因此您应该使用remember{}
当你希望你的变量能够幸存下来时re-execution of code
。换句话说,如果你有一个恒定的值,你就不会关心它,也不想记住它。另一方面,如果您希望发生动画,您希望记住两点之间的值,因此应该使用“记住”。对于复杂的计算当然最好将此代码传输到ViewModel
正如@nglauber 所说。