在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中使用记住{}函数。这根本不可能,因为记住{}函数只能在可组合上下文中调用