HarmonyOS 鸿蒙Next @Watch在子组件中监听@Prop状态变量,父组件传的值和子组件@Prop变量的值相同也会回调的问题

发布于 1周前 作者 htzhanglong 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next @Watch在子组件中监听@Prop状态变量,父组件传的值和子组件@Prop变量的值相同也会回调的问题

父子组件传值

父组件中定义:

@State status: boolean = true

子组件定义:

@Prop @Watch(‘onStatus’) status: boolean = true

首先我在子组件中修改子组件中的status为false,@Watch监听到status值变化,回调了一次onStatus方法,然后再修改父组件中的status为false,为什么还会回调onStatus方法?

@Watch判断值有无更新使用的是严格相等,子组件被我修改成了false,父组件传过来的status也是fasle,两者有什么不一样吗?

cke_42446.png


更多关于HarmonyOS 鸿蒙Next @Watch在子组件中监听@Prop状态变量,父组件传的值和子组件@Prop变量的值相同也会回调的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

这个是[@prop](/user/prop)装饰器的行为导致的

由于[@prop](/user/prop)是单向更新,所以当父组件的数据源更新时,子组件的[@Prop](/user/Prop)装饰的变量将被来自父组件的数据源重置,这个重置触发了[@watch](/user/watch)的回调

参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-prop-V13#框架行为

更多关于HarmonyOS 鸿蒙Next @Watch在子组件中监听@Prop状态变量,父组件传的值和子组件@Prop变量的值相同也会回调的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


代码太乱,就不贴出来了🤣

在HarmonyOS鸿蒙Next @Watch中,当父组件向子组件传递值,并且子组件使用@Prop注解接收这个值时,如果父组件传递的值与子组件内部@Prop变量的当前值相同,通常不应该触发监听回调。这是因为监听回调的设计初衷是为了响应值的变化。

如果在实际使用中,即便父组件传递的值与@Prop变量的当前值相同,也触发了监听回调,这可能是由于以下原因:

  1. 传递机制问题:父组件在传递值时,可能触发了某种内部机制,导致子组件认为值发生了变化。

  2. 监听器实现:子组件的监听器可能由于实现方式,对相同值的处理不够严谨,从而误触发了回调。

  3. 框架Bug:HarmonyOS鸿蒙框架在某些版本或特定情况下可能存在Bug,导致值相同也触发回调。

解决这类问题,可以尝试以下方法(但不作为建议):

  • 确保值确实未变:在父组件传递值前,确认值是否确实与@Prop变量当前值不同。
  • 检查监听器实现:确保监听器内部逻辑正确,能够准确判断值的变化。
  • 更新框架版本:如果怀疑是框架Bug,尝试更新到最新版本。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部