LaunchedEffect副作用和rememberCoroutineScope

1 LaunchedEffect 副作用

作用 : 是 Compose 里用来在组合作用域启动协程的副作用 API。
本质:CoroutineScope 绑定到 Compose 生命周期,安全执行 suspend 函数(网络请求、数据库、延迟轮播、数据流收集)。
当进入这个 Composable 组合树时 → 自动启动协程;
当key 变化 / 组件离开组合(销毁) → 自动取消协程。

一个key和多个key都可以 也可以Unit无状态 

场景 1:页面进来,一次性加载数据(key=Unit)
LaunchedEffect(Unit) {
        // 页面首次渲染执行一次;页面销毁自动取消
        viewModel.loadRemoteData()
    }

场景 2:监听 key 变化,重新加载(比如轮播下标、id 变更)
LaunchedEffect(key1, key2, ...) {
    // suspend 代码块,协程在这里执行
}

场景 3:收集 Flow / StateFlow
LaunchedEffect(Unit) {
    viewModel.eventFlow.collect { event ->
        // 处理ViewModel发出来的单次事件(弹窗、toast、导航)
    }
}

2 rememberCoroutineScope()

作用: 获取一个和当前 Composable 生命周期绑定的协程作用域,不会自动执行代码,需要手动调用 .launch{} 才启动协程;当组件离开组合树时,scope 自动 cancel。


用户交互触发的协程(命令式动作)
1. 下拉刷新
2. 拖拽结束后执行动画滚动
3. 弹窗关闭后延时操作
4. 手势回调里面执行 suspend 函数

val scope = rememberCoroutineScope()
Button(onClick = {
    scope.launch {
        viewModel.submitData() // suspend接口
    }
}) { Text("提交") }


3 LaunchedEffect 和rememberCoroutineScope() 的最大区别

  • LaunchedEffect:声明式,key 驱动,自动跑协程
  • rememberCoroutineScope:命令式,手动触发 launch(点击、下拉等事件里用)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容