web_zx
web_zx
  • 发布:2024-06-04 15:27
  • 更新:2024-06-04 15:47
  • 阅读:199

onBackPress拦截返回状态下,页面返回不会销毁当前页面吗?

分类:uni-app

从页面A进入页面B再返回页面A
在页面B存在计时器和onBackPress返回拦截,如果在返回拦截里不主动清理计时器,返回后计时器一直在打印~
这是Bug还是怎么回事?

<template>  
  <view class="box">  
    <button @click="pageChange">返回首页</button>  
  </view>  
</template>  

<script setup lang="ts">  
import { onBackPress } from "@dcloudio/uni-app";  
const pageChange = () => {  
  uni.navigateBack({  
    delta: 1,  
    animationType: "slide-out-right",  
    animationDuration: 200,  
    success: (res: any) => {  
      console.log("----", res);  
    },  
  });  
};  
let isConfirm = false;  
const timer = setInterval(() => {  
  console.log(`打印日志${Date.now()}`);  
}, 1000);  
onBackPress(() => {  
  if (isConfirm) {  
    clearInterval(timer);  
    return false;  
  } else {  
    uni.showModal({  
      title: "提示",  
      content: "是否返回?",  
      success: (res: any) => {  
        if (res.confirm) {  
          isConfirm = true;  
          pageChange();  
        }  
      },  
    });  
    return true;  
  }  
});  
</script>
2024-06-04 15:27 负责人:无 分享
已邀请:
爱豆豆

爱豆豆 - 办法总比困难多

你是用的 navigateBack 返回的吧?页面还在缓存中 所以定时器还在运行 不是bug
当使用redirectTo reLaunch switchTab 时才会摧毁当前页面 摧毁定时器
你可以在navigateBack的success回调中 摧毁定时器

  • web_zx (作者)

    我这是个简版的demo。实际项目要复杂得多。

    麻烦问一下如果反复退出再打开该界面,如何处理这个缓存的界面(历史代码较多,无法完全定位所有缓存的数据)?会反复触发Vue的onMoumted并执行对应初始化页面的逻辑,会不会导致程序越来越慢?

    2024-06-04 15:54

  • 爱豆豆

    回复 web_zx: 不用担心缓存 都是正常的 除了tabbar页面 你进入的其他页面都会重新加载的 但是定时器是要单独清除的 不然定时器可能会重复 不会导致程序变慢的

    2024-06-04 16:15

  • 爱豆豆

    回复 爱豆豆: 你看官方的Hello uni-app模版项目 里面上百个页面 也并不会卡顿

    2024-06-04 16:16

要回复问题请先登录注册