鸿蒙 状态管理-组件装饰器

前提:基于官网3.1/4.0文档。参考官网文档
基于Android开发体系来进行比较和思考。(或有偏颇,自行斟酌)

1.概念

Android中使用过Jetpack MVVM框架知道状态管理,包括React前端所使用的状态管理框架,都有所设计这点。——>通过数据状态来进行UI的渲染更新。
官网图

自定义组件拥有变量,变量必须被装饰器装饰才可以成为状态变量,状态变量的改变会引起UI的渲染刷新。如果不使用状态变量,UI只能在初始化时渲染,后续将不会再刷新。

状态管理会涉及一些需要思考的点:
1.在后台数据状态变化时,是否会触发更新
2.短事件重复数据设置,是否会触发多次更新

2. 用法

这里涉及了状态装饰器的概念。

1.@State装饰器:组件内状态

变量前面加上@State来修饰,适用于基本数据类型。Android中而是通过特别的变量来定义。(LiveData)
从标题可知,它是用于组件内。(全局肯定是不可以的)

@State装饰的变量与子组件中的@Prop装饰变量之间建立单向数据同步,与@Link、@ObjectLink装饰变量之间建立双向数据同步。
@State装饰的变量生命周期与其所属自定义组件的生命周期相同。

初始化规则
在这里插入图片描述
这张图先看看就是,等到实际用时才知道它们之间的关系。

特别注意
@State修饰的变量,如果是class对象:
1.其属性是基本数据类型,值发生变化时,能被观察者发现
2.其属性是class类型,该class的属性的值发生变化时,不能被观察者发现

为什么要这样规定?
可能是为了减少复杂性吧,若是嵌套观察,可能就没完没了了。因此编程的时候也尽量使用简单、易懂的逻辑来实现。

2.@Prop装饰器:父子单向同步

是什么?
类似@State,只不过人为将其认为是接受参数?官方说明文档跟坨*一样设计上感觉划分太啰嗦,官方举得案例很复杂。
我们从它的命名来理解它。Prop即参数的意思,那么是可以作为参数来承接传入的值(或者引用),这里因为官方将其和@State放在一块,它是可以承接传过来的@State参数。(这样理解的话,那么可以推测@State不可以将对象传递给另外的@State对象,只能传递给具有@Prop的对象?)

为什么这样设计?
不懂。目前来看,设计得比较复杂,是否真正需要有这么定义?

怎么使用?
对象上加上 @Prop修饰符。

2.@Link装饰器:父子双向同步

是什么?
@Prop是父组件向子组件状态变量的单向同步,而这个是双向,意味着@Link修饰的状态变量在子组件发生值变更时,会引发父组件进行更新。类似于liveData+dataBinding。

怎么用?
修饰符都是一样的用法。

3.@Provide装饰器和@Consume装饰器:与后代组件双向同步

是什么?

@Provide装饰的变量是在祖先节点中,可以

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ganshenml

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

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

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

打赏作者

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

抵扣说明:

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

余额充值