Compose中的附带效应(二)LaunchedEffect


前言`

阅读本文需要一定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被声明为弃用。

猜你喜欢

转载自blog.csdn.net/shop_and_sleep/article/details/130088613