@Event是为了解决什么使用场景?
在HarmonyOS V2中,@Event
修饰符被用于子组件向父组件传递数据或触发父组件中的特定行为。它主要用于实现子组件与父组件之间的通信,尤其是在子组件需要更新父组件中的状态时。从API version 12开始,@Event
可以在@ComponentV2
装饰的自定义组件中使用。
@Event
主要用于以下使用场景:
@Event
来定义一个回调函数,并在子组件中调用该函数,以实现对父组件状态的更新。@Event
提供了一种标准化的方式,允许子组件通过触发事件来与父组件或其他组件进行通信。@Event
可以实现这一需求,父组件通过定义并传递一个回调函数给子组件,子组件在需要时调用该函数,并将数据作为参数传递回父组件。在HarmonyOS V2中,使用@Event
的大致步骤如下:
@Event
修饰符:@Event
来修饰从父组件接收的回调函数。这样,子组件就可以在内部直接调用这个函数,并传递需要的数据。@Event
修饰的回调函数,并将需要传递的数据作为参数,来触发事件。假设有一个父组件Index
和一个子组件Son
,子组件需要更新父组件中的某个状态。
父组件Index
:
@Entry
@ComponentV2
struct Index {
@Local num: number = 100;
func = (unit: number) => {
this.num -= unit;
};
build() {
Column() {
Button("父组件 修改" + this.num)
.onClick(() => {
this.num++;
})
Son({ num: this.num, func: this.func })
.padding(10)
}
.width("100%")
}
}
子组件Son
:
@ComponentV2
struct Son {
@Param num: number = 0;
@Event func: (num: number) => void = () => {};
onfunc = () => {
this.func(5); // 调用父组件传入的函数,并传递参数
};
build() {
Column() {
Button(`子组件 ${this.num}`)
Button("子组件修改父组件中的状态")
.onClick(this.onfunc)
}
.border({ width: 1, style: BorderStyle.Dashed })
}
}
在这个示例中,子组件Son
通过调用@Event
修饰的func
函数,并将一个数值作为参数传递,实现了对父组件Index
中num
状态的更新。
1 回答523 阅读✓ 已解决
1 回答531 阅读
1 回答471 阅读
440 阅读
403 阅读
1 回答364 阅读
希望开发者强制实现单向数据流,子组件不应该直接修改父组件的数据,而是把向父组件发送事件,父组件接收到事件以后,修改自身数据,然后再把修改后的数据 传递下去