何时在 Jetpack Compose 中使用 derivedStateOf?

用户924

在我的 ViewModel 我有

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

我从服务器获取数据(主题),这就是数据被包装在Result<T>类中的原因。它可以是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好吗?

derivedStateOf因为我正在阅读https://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所以你会失去这方面的表现。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

何时在 Jetpack Compose 中使用 derivedStateOf?

如何在Jetpack Compose中使用CameraView?

如何在 Jetpack compose 中使用 Viewmodel

如何在 Jetpack Compose 中使用 SharedFlow

使用 Jetpack Compose 构建环

使用 Jetpack Compose 显示 Mapbox

在jetpack compose中使用非顶级乐趣是反模式吗?

在@Composable (Jetpack Compose) 中使用 get() 时出错

如何在 Jetpack Compose 中使用寻呼机布局?

在Jetpack Compose中使用自定义视图

如何在jetpack compose中使用Android PdfViewer

CameraX 无法在 jetpack compose 中使用导航库

如何在 Jetpack Compose 的 MutableState 中使用条件

如何在 jetpack compose 中使用复选框控件?

如何使用Jetpack Compose制作动画?

使用 Jetpack Compose 的屏幕过渡动画

如何使用Jetpack Compose创建GridView

如何使用jetpack compose创建“方案”?

如何使用 Jetpack Compose 创建 MultiChoiceGrid?

使用 Jetpack Compose 构建软件键盘 - 使用 Jetpack Compose 的 IME 输入法

如何在 Jetpack Compose 中使底片覆盖整个屏幕

在 Jetpack Compose 中使用修饰符在文本上绘制形状

在 Android Studio 中使用 Jetpack Compose 时,我看不到预览的交互模式

如何在 Jetpack Compose 中使用图像占位符进行预览

如何在jetpack compose中使用底部导航栏在屏幕底部放置标签

如何在jetpack compose中使用设置的完整跨度或GridCells的动态数量来实现LazyVerticalGrid?

如何在桌面版jetpack compose中使用.svg文件?

如何在jetpack compose中使用静态值创建可扩展的列表视图

如何在 Jetpack Compose Canvas 中使用 drawRoundRect 仅圆底部 2 个角