鸿蒙 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 }

相关推荐
前端 贾公子几秒前
commitlint安装和配置使用教程
前端
指尖跳动的光1 分钟前
DNS协议
前端·网络
xkxnq5 分钟前
第一阶段:Vue 基础入门(第 8 天)
前端·vue.js·flutter
搬砖的kk7 分钟前
鸿蒙 PC 版 DevEco Studio 使用 OHPM 下载三方库教程
华为·harmonyos
研☆香8 分钟前
html界面的树形菜单介绍与制作
前端·microsoft·html
星辰也为你祝福h9 分钟前
前端面试题-CSS篇
前端·css
雨雨雨雨雨别下啦12 分钟前
ajax和axios到底是什么
前端·ajax·okhttp
hxjhnct15 分钟前
CSS的模块化
前端·css
web小白成长日记18 分钟前
Vue3+ElementUI树形菜单:构建层次化用户界面
前端·microsoft·ui·面试·elementui
徐同保19 分钟前
react组件内添加一个全局点击时间,点击函数能区分是否是某个特定的id的dom触发的
前端·javascript·react.js