代码 A 是视频中的示例代码。
我不明白为什么作者需要使用asStateFlow().
我觉得Code B 还可以吧?
代码A
class MainViewModel: ViewModel() {
private val _stateFlow= MutableStateFlow("Hello World")
val stateFlow = _stateFlow.asStateFlow()
...
}
Run Code Online (Sandbox Code Playgroud)
代码B
class MainViewModel: ViewModel() {
private val _stateFlow= MutableStateFlow("Hello World")
val stateFlow = _stateFlow
...
}
Run Code Online (Sandbox Code Playgroud)
Ger*_*ssy 12
代码 A使stateFlow 状态流变为只读,而代码 B按原样公开可变状态流。
的文档asStateFlow()对此非常清楚:
将此可变状态流表示为只读状态流。
如果您看一下实现,您可以看到它将当前(可变)流包装在ReadonlyStateFlow只读的 a 中:
public fun <T> MutableStateFlow<T>.asStateFlow(): StateFlow<T> =
ReadonlyStateFlow(this, null)
Run Code Online (Sandbox Code Playgroud)
为了更容易理解,如果您在组件中使用,则在代码 AMainViewModel的情况下,该外部人员将能够读取值,但无法写入它们。同时,如果您使用代码 B,外部组件可能会将自己的值发送到状态流。这通常是不可取的,因为发送数据(这称为单向数据流)作为对来自观察者(视图组件)的操作的响应应该是 的责任。ViewModel
| 归档时间: |
|
| 查看次数: |
2012 次 |
| 最近记录: |