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



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

class CustomViewModel : ViewModel() {
// ...
var myDeckList = mutableStateListOf<Deck>()
// ...
}

ViewModel是否具有与remember类似的委派职责?

如果是,为什么mutable...没有被委派?

remember用于在重新计算中保持状态。如果我们将状态存储在ViewModel中,它将自动在重新计算中幸存下来,因为它在合成树之外。

CCD_ 7具有不同的用途。它创建一个MutableState,它是:

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

它设置了一个观察器模式(如LiveData、StateFlow等(,其中对值的写入会通知读者值的更改。所以ViewModel与这个观察者模式无关,这就是为什么您仍然需要在ViewModel中使用mutable...函数。

您在问题中使用的mutableStateListOf的工作原理相同。它创建了一个SnapshotStateList,它是一种可观察的MutableList类型,可以是快照。

尝试在viewModel中使用记住{}函数。这根本不可能,因为记住{}函数只能在可组合上下文中调用

最新更新