前言`
阅读本文需要一定compose基础,如果没有请移步Jetpack Compose入门详解(实时更新)
本文介绍Compose中LaunchedEffect的基本概念。根据官网教程总结,如有不对请在评论区指教
一、基础概念
用官方的话来说
Compose 中的附带效应是指发生在可组合函数作用域之外的应用状态的变化。
基于此,衍生了一系列的附带效应,今天我们介绍的就是LaunchedEffect,它允许您在组合函数生命周期发生特定事件时启动协程,并在其完成后自动取消它。这对于管理异步任务非常有用,例如从网络加载数据或与数据库交互。
相关依赖
implementation "androidx.compose.ui:ui:$compose_version"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
二、举例
下面是一个使用LaunchedEffect的示例:
@Composable
fun MyScreen() {
val viewModel = viewModel<MyViewModel>()
LaunchedEffect(Unit) {
viewModel.loadData() // 启动协程加载数据
}
val data by viewModel.data.collectAsState()
// 绘制UI
}
在上面的代码中,我们通过调用viewModel.loadData()
来在组合函数生命周期期间启动协程,并在其完成后自动取消它。这确保了我们的代码不会因为使用过时的数据而崩溃,并且能够及时响应用户操作。
注意事项
需要注意的是,LaunchedEffect只会在其第一个参数改变时启动新的协程。在上面的示例中,我们传递的参数是Unit
,这意味着我们只会在第一次绘制MyScreen时启动协程。如果您需要在依赖其他参数的情况下启动协程,请将这些参数传递给LaunchedEffect函数。
总之,LaunchedEffect是一个非常实用的工具,可以简化异步任务管理的复杂度,并提高代码的可读性和可维护性。
总结
值得注意的是,因为附带效应是在compose外的一些操作,所以我们必须要有一个或多个key来指定附带效应的范围,如果没有key,则违反其设计规则,因此不带key的LaunchedEffect被声明为弃用。