可变状态 VS 可变状态流?

Posted

技术标签:

【中文标题】可变状态 VS 可变状态流?【英文标题】:mutableState VS mutableStateFlow? 【发布时间】:2022-01-10 00:38:06 【问题描述】:

我很困惑,有人可以向我解释一下,这两者之间的主要区别是什么?我很难理解。 mutableState 是在 Jetpack Compose 中引入的,现在我的问题是,我们是否应该在 View Model 中使用它来替代 Mutabel State Flow?它们的目的和主要区别是什么?

【问题讨论】:

Jetpack Compose MutableState schedules a recomposition of the composable,MutableStateFlow 没有。换句话说,MutableStateFlow 是通用状态,MutableState 旨在与可组合使用。 【参考方案1】:

mutableState 正如您所提到的,它是 Jetpack Compose 的一部分,它充当触发器和可观察数据,以触发重新组合或更新您的 ui 状态。组成取决于读取mutableState值的组件级别

在可组合项中使用 mutableStateOf 取决于您的逻辑。这是 Jetpack Compose 的简单更新标志。

另一方面,mutableStateFlow 类似于 RxJava 的主题,您可以在其中设置和观察值,并以反应方式对其执行多项操作,例如映射、过滤、设置线程或使用它处理错误。

myStateFlow.debounce(1000)
            .onStart   
            .catch  
                
            
            .distinctUntilChanged()
            .launchIn(viewModelScope)

【讨论】:

【参考方案2】:

MutableState 用于 Jetpack Compose,MutableStateFlow 用于替换 MutableLiveData,在 ViewModel 内部使用。

【讨论】:

以上是关于可变状态 VS 可变状态流?的主要内容,如果未能解决你的问题,请参考以下文章

多线程----Immutable VS Mutable (可变与不可变)

Flutter: Stateful 挂件 vs Stateless 挂件

java-并发-不可变对象

可变 Redux 状态结构

在Android单向数据流中更新不可变视图状态值

更新深层不可变状态属性时,Redux 不更新组件