如何解决单个状态变量绑定多个@Watch监听器时部分监听器失效的问题
==================================

#### 问题现象

在HarmonyOS开发中，当一个状态变量@State绑定了两个@Watch监听器时，观察到其中一个监听器生效，而另一个监听器未生效。

问题代码示例参考如下：

@Entry
@Component
struct S20250403171354570182 {
  @State @Watch('change1') @Watch('change2') num: number = 0;

  _// 监听不生效_
  change1() {
    console.info('watch1 ');
  }

  _// 监听生效_
  change2() {
    console.info('watch2');
  }

  build() {
    RelativeContainer() {
      Text(this.num.toString())
        .id('HelloWorld')
        .fontSize($r('app.float.page\_text\_font\_size'))
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '\_\_container\_\_', align: VerticalAlign.Center },
          middle: { anchor: '\_\_container\_\_', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          this.num++;
        })
    }
    .height('100%')
    .width('100%')
  }
}

change1()函数未执行，change2()函数被执行，问题现象如下：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/4b/v3/HmJfKy9DQr2m8Y_x7NAZlw/zh-cn_image_0000002628770192.png?HW-CC-KV=V1&HW-CC-Date=20260709T133957Z&HW-CC-Expire=86400&HW-CC-Sign=5412D0298A4C9B3A7F3CC6C91005F05D82104ADE9E3356DDDFADF1FEA8F013B4 "点击放大")

#### 解决方案

状态变量的变化无法被多个[@Watch](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-watch)监听器同时监听。因此，需要将所有需要在状态变量变化时执行的操作合并到一个@Watch回调方法中，删除多余的@Watch和回调方法。

#### 总结

多个@Watch不能用于一个状态变量，如果使用多个会导致后面的监听器覆盖前面，导致出现多余的代码。如果想要使用一个监听器监听多个变量可以使用状态管理V2中的[@Monitor](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-new-monitor)装饰器，其差异详见官方文档[@Monitor与@Watch对比](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-new-monitor#monitor与watch对比)。