ArkTS @watch装饰器的用法(附带实例)
有这样一个场景,当一个变量发生变化时,页面中的某个元素会动态地显示与隐藏。在这种情况下,就需要对这个变量进行监听,也就是需要使用本节将要介绍的另一个装饰器 @Watch。
@Watch 装饰器用于监视某个表达式的变化,当表达式的值发生变化时,可以执行特定的逻辑操作。
@Watch 装饰器的特性如下:
在下面的案例中,用 @Watch 装饰器装饰父组件传过来的变量 hasShow,并定义函数 handleChange,当监听的数据发生变化时,handleChange 函数就会被触发。因此,我们可以在这里进行一些相关的操作,如下图所示:

图 1 @watch 的使用
完整代码如下:
@Watch 装饰器用于监视某个表达式的变化,当表达式的值发生变化时,可以执行特定的逻辑操作。
@Watch 装饰器的特性如下:
- @Watch 装饰器用于监听状态变量变化并执行回调。
- 装饰器参数必须是对 (string) => void 类型函数的引用。
- @Watch 适用于所有被装饰器标记的状态变量,不包括常规变量。
- 推荐先使用 @State、@Prop、@Link 等装饰器,再使用 @Watch。
在下面的案例中,用 @Watch 装饰器装饰父组件传过来的变量 hasShow,并定义函数 handleChange,当监听的数据发生变化时,handleChange 函数就会被触发。因此,我们可以在这里进行一些相关的操作,如下图所示:

图 1 @watch 的使用
完整代码如下:
// 定义一个名为 Demo1_3_6Watch 的组件,用于展示状态监听和子组件更新 @Entry @Component struct Demo1_3_6Watch { // 定义一个名为 hasShow 的状态变量,初始值为 true @State hasShow: boolean = true; // 构建组件的方法 build() { Column() { // 创建一个按钮,单击该按钮时修改 hasShow 的值 Button('修改 hasShow 状态') .onClick(() => { this.hasShow = !this.hasShow; }) // 创建一个 ChildWatch 组件,并将 hasShow 作为 props 传递给它 ChildWatch({ hasShow: this.hasShow }) } .width('100%') .height('100%'); } } // 定义一个名为 ChildWatch 的组件,用于监听父组件传递过来的 props 的变化 @Component struct ChildWatch { // 定义一个名为 hasShow 的 props,并监听它的值的变化 @Prop @Watch('handleChange') hasShow: boolean = true; // 定义一个名为 childCom 的状态变量,初始值为 true @State childCom: boolean = true; // 当 hasShow 发生变化时调用的方法 handleChange(): void { this.childCom = this.hasShow; } // 构建组件的方法 build() { Column() { // 显示当前监听的值 Text(`当前监听的值是:${this.hasShow}`); if (this.childCom) { // 如果 childCom 为 true,则显示子组件的内容 Text('这是子组件的内容'); } } } }