智能客服
你问我答,随时在线为你解决问题

























在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()函数被执行,问题现象如下:

状态变量的变化无法被多个@Watch监听器同时监听。因此,需要将所有需要在状态变量变化时执行的操作合并到一个@Watch回调方法中,删除多余的@Watch和回调方法。
多个@Watch不能用于一个状态变量,如果使用多个会导致后面的监听器覆盖前面,导致出现多余的代码。如果想要使用一个监听器监听多个变量可以使用状态管理V2中的@Monitor装饰器,其差异详见官方文档@Monitor与@Watch对比。
智能客服
你问我答,随时在线为你解决问题
合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
解决方案
精准高效的一站式服务支持,助力开发者商业成功