何时在 Android Compose 中使用 Remember

2024-04-02

在官方网站上,没有关于什么情况下我们应该使用“remember{}”的确切信息。

  1. 如果算术运算在代码中重复多次,我们是否应该记住它们?或者如果它只是一项操作但非常复杂?

  2. 另外,Android Compose 的类 - RoundedCornerShape、TextStyle、BorderStroke、SolidColor、FocusRequester、KeyboardActions、KeyboardOptions、Gradient 又如何呢? 当我们在创建一个对象(例如 RoundedCornerShape(10.dp))时多次使用它(在代码或循环中的不同位置(在相同的可组合函数中创建多个对象))时,记住这些对象是否有意义?单一使用?

  3. 当我们对数据列表进行一些转换时,映射什么的?

如何知道什么时候它对于重组时的缓存有用,什么时候它是多余的?


简短回答:

当您想记住该值时,可以在 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 所说。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时在 Android Compose 中使用 Remember 的相关文章

随机推荐