首页 > 解决方案 > 如何在 Jetpack Compose 中将错误报告作为副作用进行管理

问题描述

我正在玩 Jetpack Compose,我认为我的可组合组件有副作用,它会在发现意外值时尝试发送错误报告。

例如:

@Composable
fun SampleComposable(state: State, text: String) {
    when (state) {
        value1 -> {
            // show composable
        }
        value2 -> {
            // show composable
        }
        else -> {
            // send an error report
        }
    }
    Text(text)
}

所以我相信无论何时statetext变化,这都会重组。如果state是一个意外的值,并且text发生了变化,它将发送另一个错误报告。else所以我认为这个区块有副作用。

有没有办法我应该构造这个代码,以便每次都不会发送错误报告?

标签: androidkotlinandroid-jetpack-composeside-effects

解决方案


在这种情况下,您可以使用LaunchedEffect

when (state) {
    value1 -> {
        // show composable
    }
    value2 -> {
        // show composable
    }
    else -> {
        LaunchedEffect(state) {
            // send an error report
        }
    }
}

LaunchedEffectlambda 在添加到撰写视图树时只会执行一次,包括删除和重新附加以防您state获取有效值然后恢复为无效值。

此外,通过指定state为键,如果依次出现两个不同的无效状态,您可以重新运行它。

请注意,此 lambda 是在协程范围内运行的,因此您可以调用函数,但是一旦从视图树中删除,suspend该范围将被取消。LaunchedEffect

在Thinking in Compose和副作用文档中查看有关副作用的更多信息


推荐阅读