android - android jetpack compose中的 "remember"和 "mutableState"有什么区别?

标签 android android-jetpack android-jetpack-compose

我是 jetpack compose 的新手,并试图了解 remember 之间的区别和 mutableStateOf
换句话说,这条线之间的尊重

val text = remember{ mutableStateOf("") }
和这个
val text = remember{ "" }
这也是
val text = mutableStateOf("")

最佳答案

remember是一个可组合的函数,可用于缓存昂贵的操作。您可以将其视为可组合的本地缓存。

val state: Int = remember { 1 }
state在上面的代码中是不可变的。如果您想更改该状态并更新 UI,您可以使用 MutableState . Compose将观察任何读/写 MutableState对象并触发 recomposition更新用户界面。
val state: MutableState<Int> = remember { mutableStateOf(1) }

Text(
   modifier = Modifier.clickable { state.value += 1 },
   text = "${state.value}",
 )
另一个变体(在 alpha12 中添加)称为 rememberSaveable类似于 remember ,但存储的值可以在进程死亡或配置更改后继续存在。
val state: MutableState<Int> = rememberSaveable { mutableStateOf(1) }
备注 : 你也可以使用属性委托(delegate)作为语法糖来解开 MutableState .
var state: Int by remember { mutableStateOf(1) }
关于你问题的最后一部分:
val text = mutableStateOf("")

如果您正在执行上述操作,那么您只是在创建一个 MutableState对象而不记得它。MutableState是使用 LiveData 的替代方法或 Flow . Compose默认情况下不会观察到此对象的任何更改,因此不会发生重组。如果您希望观察更改并缓存状态,请使用 remember .如果不需要缓存只想观察,可以使用derivedStateOf .这是 sample如何使用它。

关于android - android jetpack compose中的 "remember"和 "mutableState"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66169601/

相关文章:

android - 在 Android 中过滤和数组适配器后 ListView 未刷新 - 请帮助

android - 有什么方法可以使用最小 SDK 小于 21 的 Android CameraX API?

android - Jetpack Compose 中的 super.onbackpressed()

android - 后端内部错误 : Exception during psi2ir in Jetpack compose

java - Android 向某个方向移动位图

Android postDelayed 与 Coroutines 延迟

android - Jetpack 撰写 : Modify Room data class using TextField

android - androidx.legacy :legacy-support-v4: dependency 有什么用

android - 在 Jetpack Compose 中创建 "nested"菜单的更好或更简单的方法是什么?

android - 在 Android 中输入 EditText 时的占位符提示