鸿蒙 OS-05 状态管理 @State @Prop @Link @Provider @Consume ...

鸿蒙 OS-05 状态管理

声明式 UI

状态驱动UI 渲染

  • @State装饰器:组件内状态, @State totalTask: number = 0;

  • @Prop装饰器:父子单向同步,使用值传递 this.totalTask .支持

  • @Link装饰器:父子双向同步,使用引用传递 $totalTask

  • @Provider @Consume 双向同步, 跨组件传递。不需要手写传递,同样的名称变量就好。1:N Provider/Consume

  • @Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化。需要传递。this.p

    less 复制代码
    @Observed class Person //class 属性可被观察
    
    @Component //子组件订阅,属性变化。
    struct ViewA {
    @ObjectLink p:Person
    }

父子 对比 prop link provider

@State装饰器:组件内状态

  1. 允许装饰的变量类型: Object、class、string、number、boolean、enum类型,以及这些类型的数组。嵌套类型的场景请参考观察变化。 类型必须被指定。

不支持any,嵌套类型、 数组中的对象属性无法触发。不允许使用undefined和null。 数组:增删、对象被覆盖引用变化 才会刷新视图。

  1. 必须本地初始化。

官网:developer.harmonyos.com/cn/docs/doc...

demo:s

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

developer.harmonyos.com/cn/docs/doc...

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

developer.harmonyos.com/cn/docs/doc...

@Provider @Consume 跨组件传递。

TypeScript 复制代码
//父
@Entry
@Component
struct PropPage {
  // 统计信息
  @Provide stat: StatInfo = new StatInfo()
  ...}}

//son 1
@Component
struct TaskStatistics {
  @Consume stat: StatInfo

//son 2
@Component
struct TaskList {
  // 总任务数量
  @Consume stat: StatInfo

@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

developer.harmonyos.com/cn/docs/doc...

  • 被@Observed装饰的类,可以被观察到属性的变化;
  • 子组件中@ObjectLink装饰器装饰的状态变量用于接收@Observed装饰的类的实例

@Observed class Person //class 属性可被观察

@Component //子组件订阅,属性变化。 struct ViewA { @ObjectLink p:Person }

相关推荐
在人间耕耘25 分钟前
HarmonyOS 开发学习分享:从入门到认证的完整路径
华为·harmonyos
Zz_waiting.34 分钟前
Javaweb - 14.6 - Vue3 数据交互 Axios
开发语言·前端·javascript·vue·axios
森之鸟44 分钟前
开发中使用——鸿蒙子页面跳转到指定Tab页面
harmonyos·鸿蒙
切糕师学AI1 小时前
前后端分离架构中,Node.js的底层实现原理与线程池饥饿问题解析
前端·vue.js·node.js
妄小闲1 小时前
网页设计模板 HTML源码网站模板下载
前端·html
icebreaker1 小时前
tailwindcss 究竟比 unocss 快多少?
前端·css·github
卢叁1 小时前
Flutter之自定义TabIndicator
前端·flutter
每天吃饭的羊2 小时前
state和ref
前端·javascript·react.js
GEO_YScsn2 小时前
Vite:Next-Gen Frontend Tooling 的高效之道——从原理到实践的性能革命
前端·javascript·css·tensorflow
GISer_Jing2 小时前
滴滴二面(准备二)
前端·javascript·vue·reactjs