Igo*_*kiy 4 android android-jetpack-compose
在官方网站上,没有关于什么情况下我们应该使用“remember{}”的确切信息。
如果算术运算在代码中重复多次,我们是否应该记住它们?或者如果它只是一项操作但非常复杂?
另外,Android Compose 的类 - RoundedCornerShape、TextStyle、BorderStroke、SolidColor、FocusRequester、KeyboardActions、KeyboardOptions、Gradient 又如何呢?当我们在创建一个对象(例如 RoundedCornerShape(10.dp))时多次使用它(在代码或循环中的不同位置(在相同的可组合函数中创建多个对象))时,记住这些对象是否有意义?单一使用?
当我们对数据列表进行一些转换时,映射什么的?
如何知道什么时候它对于重组时的缓存有用,什么时候它是多余的?
F.M*_*sir 10
简短回答:
当您想记住该值时,可以在 Android Compose 中使用 Remember。
长答案:
当状态变量发生变化然后触发重组时,该机制的工作原理如下,并且您会在手机上看到更新的屏幕。
例如:
Case 1
@Compose
fun MyComposable(){
var text: String = ""
TextField(
value = text,
onValueChange = { newText ->
text = newText
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下:当您按下键盘上的按钮时,不会发生任何事情,因为您没有撰写机制查找以更新屏幕的状态值。在这种情况下,当您在键盘上按下字母时,什么也不会发生。
Case 2
@Compose
fun MyComposable(){
var text by mutableStateOf("")
TextField(
value = text,
onValueChange = { newText ->
text = newText
}
}
Run Code Online (Sandbox Code Playgroud)
在本例中,您有一个状态变量(在我们的例子中是一个字符串),当您按下键盘上的按钮时,就会发生重组。所以该机制说嘿,看看值已经改变了,让我用这个可组合项重新组合屏幕,然后块再次运行,text变量再次默认为空字符串("")。因此,即使发生了重组,您也会在屏幕上看到相同的内容。
Case 3
@Compose
fun MyComposable(){
var text by remember { mutableStateOf("") }
TextField(
value = text,
onValueChange = { newText ->
text = newText
}
}
Run Code Online (Sandbox Code Playgroud)
10在这种情况下,假设您想在键盘上键入数字。您单击1机制会看到状态值已更改。然后,当处于文本值时,机制会再次执行可组合函数,它不会默认它"",而是保留或记住1您之前按下的值。所以你1在屏幕上看到,你可以按下0并最终看到 10...
So when is useful to use remember?由于可组合项的块可能会以意想不到的方式运行多次,因此remember{}当您希望变量在此过程中继续存在时,应该使用 a re-execution of code。换句话说,如果你有一个恒定的值,你就不会关心它,也不想记住它。另一方面,如果您希望发生动画,您希望记住两点之间的值,因此应该使用“记住”。对于复杂的计算,当然最好将此代码转移到ViewModel@nglauber 中所述的 a 。
| 归档时间: |
|
| 查看次数: |
5173 次 |
| 最近记录: |