Compose 中的副作用确实需要仔细管理,好在它提供了一系列副作用 API 来帮你安全、高效地处理这些场景。下面我将为你梳理这些副作用 API 的使用方法、适用场景以及一些最佳实践。
下面这个表格汇总了 Compose 中主要的副作用 API,帮助你快速了解它们的核心用途和特点:
| API 名称 | 核心用途 | 是否支持协程 | 是否需要清理资源 | 执行时机 | 关键参数 |
|---|---|---|---|---|---|
| LaunchedEffect | 在组合内启动协程,执行挂起函数操作 | ✅ | ❌ | 进入组合时,或 key 变化时 | key1, key2, ... |
| rememberCoroutineScope | 获取与组合生命周期绑定的协程作用域,用于在组合外(如回调中)启动协程 | ✅ | ❌ | 返回的 Scope 可用于在组合生命周期内任意时刻启动协程 | 无 |
| DisposableEffect | 处理需要清理资源的副作用(如监听器、订阅) | ❌ | ✅ | 进入组合时,或 key 变化时;退出组合或 key 变化时执行 onDispose |
key1, key2, ... |
| SideEffect | 在每次成功重组后执行轻量级操作(如日志、分析) | ❌ | ❌ | 每次成功的重组之后 | 无 |
| produceState | 将非 Compose 状态(如异步数据流)转换为 Compose 状态 | ✅ | ❌ | 进入组合时启动协程,退出时取消 | initialValue, key |
| derivedStateOf | 从其他状态派生新状态,用于优化性能 | ❌ | ❌ | 所依赖的状态发生变化且计算结果不同时 | 无 |
💡 副作用 API 使用场景与示例
1. LaunchedEffect:执行协程任务
LaunchedEffect 允许你在可组合项的作用域内启动一个协程2。这个协程的生命周期会与可组合项的生命周期绑定:当可组合项进入组合或者** key 发生变化时,协程会启动或重新启动;当可组合项退出组合**时,协程会自动取消12。
基本用法:
kotlin
复制
下载
@Composable
fun MyScreen(userId: String) {
var userData by remember { mutableStateOf<User?>(null) }
// 当 userId 变化时

最低0.47元/天 解锁文章
1699

被折叠的 条评论
为什么被折叠?



