gpt4 book ai didi

android - 何时在 Jetpack Compose 中使用衍生状态?

转载 作者:行者123 更新时间:2023-12-03 08:07:57 27 4
gpt4 key购买 nike

在我的 ViewModel 中我有

private val _topicsResponse = MutableStateFlow<Result<List<Topic>>>(Result.Initial)
val topicsResponse = _topicsResponse.asStateFlow()

我从服务器获取数据(主题),这就是数据被包装在 Result<T> 中的原因类(class)。可以是Result.Initial , Result.Loading , Result.SuccessResult.Error

在主题屏幕的撰写功能中,我有使用 Snackback 显示错误的逻辑

val topicsResponse: Result<List<Topic>> by topicsViewModel.topicsResponse.collectAsState()

Box(modifier = Modifier.fillMaxSize()) {
...

if (topicsResponse is Result.Error) {
Snackbar(
action = {
Button(onClick = { topicsViewModel.loadTopics() }) {
Text(stringResource(id = R.string.retry_text))
}
},
modifier = Modifier
.padding(8.dp)
.align(Alignment.BottomCenter)
) { Text(text = "Test error message") }
}
}

topicsResponse is Result.Error好不好?在这里?

因为我正在阅读 derivedStateOfhttps://developer.android.com/codelabs/jetpack-compose-advanced-state-side-effects?continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fcompose%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fjetpack-compose-advanced-state-side-effects#8

所以我不确定是否应该使用

val showSnackBarError by remember {
derivedStateOf {
topicsResponse is Result.Error
}
}

或者只是val showSnackBarError = topicsResponse is Result.Error

topicsViewModel.topicsResponse.collectAsState() -collectAsState已有 remember在其实现中

但仍然topicsResponse is Result.Error即使这个条件的结果与我理解的相同,也会在每次重组时进行计算

最佳答案

是的,topicsResponse is Result.Error 将在每次重组时计算,但如果结果没有改变 - 你根本不应该关心它。实际上,这种“计算”对性能没有影响。

你可以在这里使用remember并且它会起作用,但是remember本身比is操作的成本要大得多。所以你会在这方面失去性能。

至于衍生状态 - 在这里使用它是没有意义的。它用于跟踪多个状态变化

关于android - 何时在 Jetpack Compose 中使用衍生状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71614556/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com