为什么在 ViewModel 中使用“mutableStateOf”而不是“remember”?

Sue*_*e97 3 android kotlin android-jetpack-compose

在 ViewModel 中,remember不使用,但mutable...使用:

class CustomViewModel : ViewModel() {
    // ...
    var myDeckList = mutableStateListOf<Deck>()
    // ...
}
Run Code Online (Sandbox Code Playgroud)

是否ViewModel有类似于remember规定的委托责任?

如果是这样,为什么mutable...不委托?

Arp*_*kla 12

remember用于在重组时保留状态。如果我们将状态存储在 ViewModel 内部,它会自动在重组中幸存下来,因为它位于组合树之外。

mutableStateOf服务于不同的目的。它创建了一个MutableState

一个可变值持有者,在执行 [Composable] 函数期间读取 [value] 属性,当前的 [RecomposeScope] 将订阅该值的更改。当写入并更改 [value] 属性时,将安排任何订阅的 [RecomposeScope] 的重组。

它设置了一个观察者模式(如 LiveData、StateFlow 等),其中写入值会告知读者值的变化。因此 ViewModel 与观察者模式无关,这就是为什么您仍然需要mutable...在 ViewModel 中使用函数。

您在问题中使用的内容mutableStateListOf也是如此。它创建了一个可观察且可以快照的SnapshotStateList类型。MutableList