水车
水车
  • 发布:2023-05-16 17:36
  • 更新:2023-05-16 18:04
  • 阅读:383

【报Bug】切换页面后,页面生命周期函数 onShow 会累增执行,导致程序越用性能越差

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 12.6.5

HBuilderX类型: 正式

HBuilderX版本号: 3.7.9

浏览器平台: Chrome

浏览器版本: 113.0.5672.92

项目创建方式: HBuilderX

示例代码:
<script setup>  
    onShow(() => {  
        debugger  
        console.log('---------onShow---------',new Date())  
    })  
</script>

操作步骤:

一个页面中有多个子模块,每个子模块都有onShow 回调函数,在onShow回调中写入逻辑代码。

预期结果:

每次触发onShow时,只执行一次即可。多次切换后,每次也只执行一次。

实际结果:

函数一直在累增执行。

bug描述:

问题描述

页面生命周期函数 OnShow 会累增执行,第一次切换执行1次,第二次切换执行2次,第三次切换执行3次,以此类推。直到强制刷新页面清空缓存后再次从头开始累增。

如果一个页面有多个组件都使用到了 onShow回调函数,则会导致一次累增多次。已上传操作视频。

视频解释

选择第一个选项,里面有三个带onShow的模块,结果每一个onShow 函数执行了边,第二个选项有一个带onShow的子模块,缺执行了4遍:(3+1),切换会第一个模块后,onShow 执行了7遍(4+3),切换回第二个选项后,onShow执行了8遍(7+1),一直执行,会无限累增。如果onShow中写入逻辑函数,也会执行很多遍。

2023-05-16 17:36 负责人:无 分享
已邀请:
水车

水车 (作者)

代码中,一直在使用同一个组件,用的是v-for 循环展示。我猜测uniapp是每次直接把onShow push到了主线程,只管push,没有管pop导致的。

Diligent_UI

Diligent_UI - 【插件开发】【专治疑难杂症】【多款插件已上架:https://ext.dcloud.net.cn/publisher?id=193663(微信搜索飘逸科技UI小程序直接体验)】【骗子请绕道】问题咨询请加QQ群:120594820,代表作灵感实用工具小程序

组件内没有onshow这个函数,只有页面有,无法理解你的意思

  • 水车 (作者)

    页面路由打开的是 a.vue这个组件, 在a.vue中引入了b.vue这个组件。我在b.vue组件中使用了 onShow回调。

    2023-05-16 18:05

水车

水车 (作者)

目前只能从代码方面规避:

  1. 页面的回调函数只能在页面路由直接打开的那个组件中使用,在子组件中使用则不得动态增减子组件。

要回复问题请先登录注册