android - 如何在 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)
}
所以我相信无论何时state
或text
变化,这都会重组。如果state
是一个意外的值,并且text
发生了变化,它将发送另一个错误报告。else
所以我认为这个区块有副作用。
有没有办法我应该构造这个代码,以便每次都不会发送错误报告?
解决方案
在这种情况下,您可以使用LaunchedEffect
:
when (state) {
value1 -> {
// show composable
}
value2 -> {
// show composable
}
else -> {
LaunchedEffect(state) {
// send an error report
}
}
}
LaunchedEffect
lambda 在添加到撰写视图树时只会执行一次,包括删除和重新附加以防您state
获取有效值然后恢复为无效值。
此外,通过指定state
为键,如果依次出现两个不同的无效状态,您可以重新运行它。
请注意,此 lambda 是在协程范围内运行的,因此您可以调用函数,但是一旦从视图树中删除,suspend
该范围将被取消。LaunchedEffect
在Thinking in Compose和副作用文档中查看有关副作用的更多信息
推荐阅读
- gulp - 如何摆脱 Gulp 的“从未定义的任务:默认”?
- r - 使用 R 中的蒙特卡洛模拟股票价格
- swift - iOS 13 Xcode 11:PKPushKit 和 APNS 在一个应用程序中
- python-3.x - python2和python3中用gmpy2计算q,但结果不一样
- android - 用于 RESTFul JSON API 交互的推荐 Android HTTP 库是什么?
- java - RecyclerView 更新而不刷新适配器列表
- java - Firebase RecycleView 与 Edittext 同时进行多项更改
- ios - Firestore 访问规则在拒绝访问时不会报告任何错误
- chart.js - Chart.js 不显示带有线性轴和固定步长的堆叠数据
- ios - 在 UITableViewCell 中创建“标签云”