Compose中的附带效应(二)LaunchedEffect

LaunchedEffect是JetpackCompose中用于管理异步任务的工具,它在组合函数作用域外处理状态变化,允许在生命周期内启动协程并在完成时自动取消。当其参数改变时,会启动新的协程。通过示例展示了如何在UI组件中使用LaunchedEffect加载数据,强调了使用关键字控制协程执行的重要性。
摘要由CSDN通过智能技术生成


前言`

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我怀里的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值