HarmonyOS 鸿蒙Next 状态管理V2版本中@Event装饰器设计的目的是啥?
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。