HarmonyOS 鸿蒙Next 状态管理V2版本中@Event装饰器设计的目的是啥?

发布于 1周前 作者 yibo5220 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 状态管理V2版本中@Event装饰器设计的目的是啥?
看官网对@Event装饰器的描述(https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-new-event-V5),是用于组件输出的,可以更改父组件中的变量。但是我用@Param去修饰changeFactory也能达到相同的效果。那么这个@Event装饰器感觉也没有啥用处啊。@Event装饰器是不是还有啥隐藏用法?
示例代码如下:

@Entry
@ComponentV2
struct Index1e {
  @Local title: string = "Titile One";
  @Local fontColor: Color = Color.Red;

  build() {
    Column() {
      Text(`${this.title}`)
      Child1e({
        title: this.title,
        fontColor: this.fontColor,
        changeFactory: (type: number) => {
          if (type == 1) {
            this.title = "Title One";
            this.fontColor = Color.Red;
          } else if (type == 2) {
            this.title = "Title Two";
            this.fontColor = Color.Green;
          }
        }
      })
    }
  }
}

@ComponentV2
struct Child1e {
  [@Param](/user/Param) title: string = '';
  [@Param](/user/Param) fontColor: Color = Color.Black;
  [@Param](/user/Param) changeFactory: (x: number) => void = (x: number) => {};

  build() {
    Column() {
      Text(`${this.title}`)
      Button("change to Title Two")
        .onClick(() => {
          this.changeFactory(2);
        })
      Button("change to Title One")
        .onClick(() => {
          this.changeFactory(1);
        })
    }
  }
}
2 回复

有一些场景需要 在组件内触发一个事件,去改变父组件的数据,父组件数据引起子组件的变化,例如:

一个列表中,点击列表项目,设置列表项为已读, 而是否已读这个数据 来自于 父组件的数据,那么就需要,在 列表项的 点击事件中去 改变 父组件的数据。

HarmonyOS 鸿蒙Next 状态管理V2版本中,@Event装饰器设计的目的是为了实现子组件向父组件的主动通信,特别是用于请求更新父组件中影响子组件的变量。具体来说:

  • 功能实现@Event装饰器装饰的是方法类型,它作为组件的输出,允许子组件通过此方法影响父组件中的变量。这种机制使得子组件能够请求父组件更新其状态,从而实现数据的双向流动(但需要注意,数据的同步回子组件是异步的)。
  • 使用场景:在组件化开发中,当子组件需要基于某些事件(如用户交互)更新父组件的状态时,可以使用@Event装饰器。这有助于保持组件间的松耦合,同时实现必要的数据交互。
  • 版本要求@Event装饰器是从API version 12开始,在@ComponentV2装饰的自定义组件中支持的。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部