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

Compose (14/N) - 附带效应 EffectPI

一、概念

纯函数函数与外界交换数据只能通过形参和返回值进行,不会对外界环境产生影响。
副作用函数内部与外界进行了交互,产生了其它结果(如修改外部变量)。组合函数是用来声明UI的,所以跟UI描述不相关的操作都是副作用。
组合函数的特点执行顺序不定、可以并行执行、可能非常频繁的重组、可以跳过重组。
组合函数需要处理的副作用

执行时机要明确:例如挂载时、重组时。

执行次数要可控:是否应该随着重组反复执行。

不会造成泄漏:移除时释放资源。

Compose生命周期:

某个组合被多个地方使用,会生成多个实例,有各自的生命周期。

Enter挂载到树上首次显示。
Composition重组刷新UI(执行0/N次)。
Leave从树上移除不再显示。

API:

LaunchedEffect第一次执行组合函数时调用、DisposableEffect内部有一个onDespose()函数当页面退出时调用、SideEffect每次重组都会调用。

二、Effect API

组合函数应该是无副作用的,如果要在组合函数中产生附带效应需要使用EffectAPI。

2.1 LaunchedEffect

也是一个组合函数,但是不产生UI。副作用往往都是耗时操作,提供协程作用域以便在组合函数中做耗时操作(动画也是耗时操作)。 

组合函数生命周期LaunchedEffect
挂载启动一个协程并执行block。
重组key改变时,之前未执行完会被取消,然后再次执行block。
key不变时,不会重新执行block。
移除协程未执行完会被取消。(动画会被打断)

fun LaunchedEffect(
    key1: Any?,        //key值改变就会执行block(默认挂载时就会执行一次)
    block: suspend CoroutineScope.() -> Unit
)

val state = remember { mutableStateOf(false) }
LaunchedEffect(state) {//...耗时操作或动画
}

2.2 rememberCoroutineScope

用于在组合外启动协程(LaunchedEffect是组合函数只能在其它组合中调用)。

http://www.lryc.cn/news/59360.html

相关文章:

  • 云日记个人中心项目思路
  • docker容器的相关环境及创建镜像1
  • 如何使用ChatGPT在1天内完成毕业论文
  • Debezium同步之实时数据采集必备工具
  • 【区块链】走进web3的世界-gas费用
  • 世界上最大的手工艺品连锁零售商Michaels验厂总结
  • springboot如何优雅的打印项目日志
  • 【JAVA程序设计】(C00127)基于SSM+vue开发的音乐播放管理系统-有文档
  • C#|调用C/C++动态库
  • 让chatGPT当我的老师如何? 通过和chatGPT交互式学习,了解在ES中,一条JSON数据是如何写到磁盘上的
  • chapter-7数据库事务
  • 阿里本地生活再出发:口碑入高德,备战美团、抖音
  • SSM学习记录3:响应(注释方式 + SprigMVC项目 + 2022发布版本IDEA)
  • Linux·gcc 编译优化简介
  • 【电子学会】2022年12月图形化一级 -- 潜水
  • MySQL日期时间函数汇总、时间格式转换方法
  • 【CSS】使用绝对定位 / 浮动解决外边距塌陷问题 ( 为父容器 / 子元素设置内边距 / 边框 | 为子元素设置浮动 | 为子元素设置绝对定位 )
  • 前端手写综合考题
  • 数据结构-排序
  • ROS话题通信自定义+发布订阅代码--03
  • 【MySQL】实验七 视图
  • Linux常见操作命令【三】
  • C-关键字(下)
  • 关于电商商品数据API接口列表,你想知道的(详情页、Sku信息、商品描述、评论问答列表)
  • 232:vue+openlayers选择左右两部分的地图,不重复,横向卷帘
  • 溯源取证-内存取证 高难度篇
  • JAVA语言中的代理模式
  • 最后一步:渲染和绘制
  • C++类和对象终章——友元函数 | 友元类 | 内部类 | 匿名对象 | 关于拷贝对象时一些编译器优化
  • 拼多多按关键字搜索商品 API