在viewmodel中使用哪个更好,_ui_state.update{}还是_uiState.value = _uiState.value.copy()?

问题描述 投票:0回答:2

我很困惑该使用什么,是使用 update 还是 copy 来更改/更新 jetpack compose 中 UI 的状态 有人说用

_uiState.update {
    it.copy()
}

有人说用

_uiState.value = _uiState.value.copy()

使用哪一种更好?为什么?

我已经使用了copy()很多次,但我仍然不确定我是否有效或正确地更新了uiState。

android kotlin android-jetpack-compose android-viewmodel
2个回答
0
投票

我想说这两种方式都是有效的。这两种方法之间的核心区别是线程安全。

update
函数以原子方式执行修改,这意味着它确保不能有两个线程同时写入同一个
MutableStateFlow
。因此,当您从两个不同的地方异步更新
MutableStateFlow
时,您一定应该使用它,否则一些更新可能会丢失。

使用其值的指定函数以原子方式更新

MutableStateFlow.value

另请参阅这篇文章,其中指出了同时更新

MutableStateFlow
的危险。

否则,如果您没有同时修改 MutableStateFlow,则使用

value
字段和
copy
函数就足够了,并且比
update
更便宜(尽管差异可能并不显着)。


0
投票

这只能通过 StateFlow 实现。

而且,请注意,它不一定与 Compose 有关,它是 kotlin 协程的东西。

您可以使用任何一种方法 -

  • stateflow.update {...}
    是一种执行某些操作的原子方法,并且仅发出一个状态更新

  • stateflow.value = x
    基本相同,但它为您的流程分配了一些新值。

如果您不使用以前的状态(即,您不需要在状态更新中使用

copy
),则使用
stateflow.value
,但如果您想从旧状态创建新状态,则使用
stateflow.update {...}
而不是
copy

是有意义的
© www.soinside.com 2019 - 2024. All rights reserved.