从页面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>
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