我很困惑该使用什么,是使用 update 还是 copy 来更改/更新 jetpack compose 中 UI 的状态 有人说用
_uiState.update {
it.copy()
}
有人说用
_uiState.value = _uiState.value.copy()
使用哪一种更好?为什么?
我已经使用了copy()很多次,但我仍然不确定我是否有效或正确地更新了uiState。
我想说这两种方式都是有效的。这两种方法之间的核心区别是线程安全。
update
函数以原子方式执行修改,这意味着它确保不能有两个线程同时写入同一个MutableStateFlow
。因此,当您从两个不同的地方异步更新 MutableStateFlow
时,您一定应该使用它,否则一些更新可能会丢失。
使用其值的指定函数以原子方式更新
。MutableStateFlow.value
另请参阅这篇文章,其中指出了同时更新
MutableStateFlow
的危险。
否则,如果您没有同时修改 MutableStateFlow,则使用
value
字段和 copy
函数就足够了,并且比 update
更便宜(尽管差异可能并不显着)。
这只能通过 StateFlow 实现。
而且,请注意,它不一定与 Compose 有关,它是 kotlin 协程的东西。
您可以使用任何一种方法 -
stateflow.update {...}
是一种执行某些操作的原子方法,并且仅发出一个状态更新
stateflow.value = x
基本相同,但它为您的流程分配了一些新值。
如果您不使用以前的状态(即,您不需要在状态更新中使用
copy
),则使用 stateflow.value
,但如果您想从旧状态创建新状态,则使用 stateflow.update {...}
而不是 copy
是有意义的