当前位置: 首页 > news >正文

Compose 中的 LaunchedEffect

LaunchedEffect 是 Jetpack Compose 中的一个副作用处理函数,它允许你在组合变化时运行挂起函数。特别适合那些需要与可组合项生命周期绑定的协程操作。

基本用法

@Composable
fun MyComposable() {var count by remember { mutableStateOf(0) }// 当key(count)变化时,LaunchedEffect会重新运行LaunchedEffect(count) {// 这个代码块在协程作用域中运行delay(1000) // 这里可以调用挂起函数println("计数在1秒后变为 $count")}Button(onClick = { count++ }) {Text("增加 ($count)")}
}

主要特性

  1. 协程作用域LaunchedEffect 中的代码在协程作用域中运行,当可组合项退出组合或key变化时自动取消

  2. 关键参数

    • 当可组合项进入组合时启动协程

    • 当任何key变化时重新启动

    • 当可组合项离开组合或key变化时取消

  3. 常见用途

    • 一次性操作(如显示Snackbar)

    • 启动需要清理的观察者

    • 动画

    • 任何挂起函数调用

示例

一次性效果(类似onCreate)

@Composable
fun OneTimeEffect() {LaunchedEffect(Unit) { // 使用Unit作为key表示只运行一次println("这只在组合时运行一次")}
}

动画示例

@Composable
fun AnimatedBox() {var animated by remember { mutableStateOf(false) }LaunchedEffect(animated) {animate(/* 动画参数 */)}Button(onClick = { animated = !animated }) {Text("切换动画")}
}

Snackbar示例

@Composable
fun SnackbarExample(scaffoldState: ScaffoldState) {var clickCount by remember { mutableStateOf(0) }LaunchedEffect(clickCount) {if (clickCount > 0) {scaffoldState.snackbarHostState.showSnackbar("按钮被点击了 $clickCount 次")}}Button(onClick = { clickCount++ }) {Text("点击我")}
}

重要提示

  • 如果不需要重新启动效果,可以使用 LaunchedEffect(Unit)

  • 确保key参数正确设置,避免不必要的重新启动

  • 协程会在效果离开组合时自动取消,无需手动清理

相关文章:

  • 基于大模型预测的视神经脊髓炎技术方案
  • CAU人工智能class6 ResNet
  • vocabulary in program
  • Swagger
  • 头歌软工导论作业
  • 深度学习模型在PDE求解中的实战:详细综述
  • Ntfs!ReadIndexBuffer函数分析之根目录读取索引缓冲区的一个例子
  • 给定终点和时间的DoubleS轨迹
  • 51页 @《人工智能生命体 新启点》中國龍 原创连载
  • 实验7 HTTP协议分析与测量
  • 国际前沿知识系列二:基于不同类型头部碰撞中的运动学特征预测能力统计分析
  • 【踩坑记录】nvidia-smi 能识别 GPU,但 torch.cuda.is_available() 报错的终极解决方案
  • Selenium 测试框架 - Python
  • 语音合成之十六 语音合成(TTS)跳跃与重复问题的解析:成因、机制及解决方案
  • C语言学习之数据在内存中的存储
  • ModbusRTU转profibusDP网关与RAC400控制器06功能码的应用
  • Level1.7列表
  • Java IO流学习指南:从小白到入门
  • Java程序员学从0学AI(三)
  • 【信息系统项目管理师】一文掌握高项常考题型-项目进度类计算
  • php网站建设的公司/便宜的seo官网优化
  • 手机网站推荐几个/如何建网址
  • b2c交易平台/江西网络推广seo
  • 网站建设架构/站长工具seo综合查询收费吗
  • 青岛经济师考试/seo技术服务外包公司
  • wordpress 注册超时/上海网站营销seo电话