在 HarmonyOS 中,实现父组件中的变量值改变时,子组件中的值也跟着变化,可以通过 @Observed、@State 和 @Link 装饰器来实现。以下示例展示了如何实现这种双向绑定,使得父组件的状态变更能够自动更新子组件的显示。
示例代码
定义父组件
import { Observed } from 'ohos-data-binding';
import { Column, Text, Button, Component, ViewComponent } from 'ohos-jsb-hicore';
@Component
class ParentComponent extends ViewComponent {
@Observed parentMessage: string = "Hello from Parent!";
build() {
Column() {
// 显示父组件的消息
Text(this.parentMessage)
.margin({ top: 20 })
.width('100%')
.height(50);
// 按钮用于修改父组件的消息
Button("Update Message in Parent")
.margin({ top: 20 })
.onClick(() => {
this.parentMessage = "Parent updated the message!";
});
// 引入子组件并传递父组件的信息
ChildComponent()
.message(this.parentMessage);
}
}
}
定义子组件
import { Link } from 'ohos-data-binding';
import { Column, Text, Button, Component, ViewComponent } from 'ohos-jsb-hicore';
@Component
class ChildComponent extends ViewComponent {
@Link message!: string; // 使用 @Link 接受并反映父组件的状态
build() {
Column() {
// 显示子组件接收到的父组件消息
Text(this.message)
.margin({ top: 20 })
.width('100%')
.height(50);
// 按钮用于修改父组件的消息
Button("Update Message in Child")
.margin({ top: 20 })
.onClick(() => {
this.message = "Child updated the message!";
});
}
}
}
关键点解释
@Observed:
用于父组件声明一个可观察的数据变量 parentMessage。
当这个变量发生变化时,会触发绑定的子组件重新渲染。
@Link:
子组件通过 @Link 修饰符接收从父组件传递的数据变量 message。
@Link 允许子组件访问和反映父组件的数据,从而实现同步更新。
数据绑定机制:
父组件将自身的状态变量 parentMessage 通过属性传递给子组件。
子组件使用 @Link 接收并绑定该状态变量,这意味着当父组件的 parentMessage 发生变化时,子组件中的 message 会自动更新。
用户交互:
父组件和子组件各有一个按钮,用于展示如何通过用户交互修改状态,并反映在两个组件中。
通过点击按钮,父组件或子组件可以更新变量,从而触发另一方组件的重新渲染。
总结
通过上述示例代码,可以看到如何利用 @Observed 和 @Link 实现父组件与子组件之间的双向绑定。当父组件中的状态变量改变时,子组件中的相应变量会自动更新,以确保双方数据的一致性。这样可以显著提高组件间通信的效率和代码的可维护性。