小小菜76055421
小小菜76055421
  • 发布:2023-04-14 17:52
  • 更新:2023-10-19 16:47
  • 阅读:733

页面没有及时卸载,可能导致的watch监听多次

分类:uni-app

由于在a页面使用watch监听,然后从b页面再次进入a页面时,由于a页面此时还没有卸载,导致watch始终处于监听中,所以从b进入a时,会导致watch监听两次,有大佬,知道这个问题的解决方式吗

2023-04-14 17:52 负责人:无 分享
已邀请:
Azikou

Azikou

我也遇到了这个问题,现在知道是是后退会卸载前一页,可以取消watch
然后是redirect和relunch也可以,取消
如果两个页面互相用navigate跳转,那样watch就会一直叠上去

  • 小小菜76055421 (作者)

    所以你的解决方案是

    2023-05-26 14:21

  • Azikou

    回复 小小菜76055421: 暂时用了uni.redirectTo, 还在想法子

    2023-05-26 15:56

  • 小小菜76055421 (作者)

    回复 Azikou: 有了好的方案,告知我下呗

    2023-05-26 15:57

  • Azikou

    回复 小小菜76055421: 同事给看我个建议,就是往监听页面跳转的时候,先判断这个页面是否存在,存在的话就用back,

    2023-05-29 09:07

希灵帝国审查官

希灵帝国审查官

我这是vue3的写法 有可能有效

const ScaleWatch = watch(  
  () => settingStore.isScalePageTemplate,  
  (newVal) => {  
     setScaleClass();  
  }  
);  

onBeforeUnmount(() => {  
  //由于nt uniapp  页面跳转后通过使用vuex/Pinia触发的watch监听不会销毁 会重复执行,打开几次执行几次  

  //手动销毁监听  
  ScaleWatch();  
});  

onDeactivated(() => {  
  //手动销毁监听  
  ScaleWatch();  
});  

onHide(() => {  
  //手动销毁监听  
  ScaleWatch();  
});  
套马杆的套子

套马杆的套子 - 没有解决不了的问题,只有解决不完的问题

onhide的时候,把监听注销就行吧

  • Azikou

    有注销watch的方法么,就是不知道怎么注销。

    2023-11-09 08:32

要回复问题请先登录注册