VUE3跳转页面时 定时器未清除解决

news2024/11/19 3:24:02

一,问题

1、在vue中使用setTimeout定时器的时候,可能会遇到关不掉的情况,会存在明明已经在beforeDestroy和destroyed中设置了定时器清除了,但是有时候没生效,定时器还会继续执行。
2、在这里需要说一下setTimeout的使用场景:
(1)需要执行一次定时的时候用得到,比如需要在多久之后执行的一次操作
(2)接口需要定时查询,并且需要在接口返回数据后再查询的情况下(接口定时查询的时候,该方式会经常用得到)
二、问题出现的原因
场景:目前有个接口方法,执行该方法需要5s执行完成,并且还需要在执行完后定时查询数据
问题原因分析:
(1)问题发生的场景

a. 该方法需要5s执行完,但是当执行到该方法中第2s的时候,切换页面的时候将该组件销毁了


b. 销毁了该组件,但是该方法还是会在缓存中执行往下执行,并不会因为组件销毁而停止执行后面的代码,所以后面的定时器还是会执行到,并且后续的定时器也会一直执行


c. 因为一直在缓存中执行,并且组件已经销毁了,所以定时器就会存在清不掉的情况
(2)这种情况是偶发性的,很少有需要执行5s的方法,为了将该问题复现测试,我测试的时候是自己模拟了一下这个场景,所以使用的是5s;大部分的情况可能是几十毫秒或者几百毫秒就可以执行完成了,但是在销毁的时候,恰好处于方法执行的过程中,就会导致定时器清不掉的情况

重要就是在切换页面时 定时器并未清除掉(已经在VUE2,beforeDestroy,destroyed  , VUE3 onBeforeUnmount,onUnmounted  中设置清除定时器方法但未生效)

解决方法 

使用 路由 导航守卫 监听页面跳转时清除

VUE2  (无需引入 直接书写)

  // destroyed() {
  //   clearInterval(this.timer);  // 清除定时器
  // },  之前是这么写的

  // 将 destroyed() 改为 beforeRouteLeave()
  beforeRouteLeave(to, from, next) {
    if (this.timer) {
      clearInterval(this.timer);
      this.timer = null;
      this.$refs.mychild.headerClearTimeFn();
    }
     //注意一定要next()让其跳转!!!
    next()
  }

VUE3  需要引入

import { onBeforeRouteLeave } from 'vue-router'



onBeforeRouteLeave((to, from, next) => {
    //清除定时器
       // ......
    next()
})

 

onBeforeRouteLeave(离开当前页面路由时触,return false则阻止跳转)onBeforeRouteUpdate(路由更新时触发)

vue-router提供的两个composition api,它们只能被用于setup中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1358840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【React系列】受控非受控组件

本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. refs 的使用 在React的开发模式中,通常情况下不需要、也不建议直接操作DOM原生,但是某些…

红日靶场第一关stack靶场

安装黑客后台工具,使用cs工具 也就是cobaltstrike工具 首先我们先使用msfvenom工具生成一个用于windows的木马后台文件,然后我们将生成的木马文件名字叫做620.exe 然后我们要使用msfconsole工具监听咱们的木马后门 启动监听 用蚁剑开启我们所设置的木…

商城系统哪家好,如何选择商城系统?

之前我们做电商项目时,通过百度搜索“java商城系统”、”商城系统有哪些“等关键词,发现各类系统琳琅满目,我们先按商城系统推出时间做了一个统计,然后针对各系统进行了一定的调研。 推出时间超过10年的:shop、ecshop…

Java爬虫之Jsoup

1.Jsoup相关概念 Jsoup很多概念和js类似,可参照对比理解 Document :文档对象。每份HTML页面都是一个文档对象,Document 是 jsoup 体系中最顶层的结构。 Element:元素对象。一个 Document 中可以着包含着多个 Element 对象&#…

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想)

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想) 一.安装依赖二、主要代码 预览效果链接: https://github.com/501351981/vue-office 插件文档链接: https://501351981.github.io/vue-office/examples/d…

webrtc报文记录

tcp.port 10443 || tcp.port 6080 || udp.port 8000 https://download.csdn.net/download/dualvencsdn/88706745

LeetCode 2397. 被列覆盖的最多行数:二进制枚举

【LetMeFly】2397.被列覆盖的最多行数:二进制枚举 力扣题目链接:https://leetcode.cn/problems/maximum-rows-covered-by-columns/ 给你一个下标从 0 开始的 m x n 二进制矩阵 mat 和一个整数 cols ,表示你需要选出的列数。 如果一行中&am…

数据结构和算法-插入排序(算法效率 折半优化 顺序表与链表插入排序 代码实现)

文章目录 插入排序算法实现算法效率分析优化-折半插入排序代码实现对链表进行插入排序小结 插入排序 首先49当作第一个已经排好序得元素,将第二个元素与前面得元素对比,发现小于49,于是49移动位置 此时将65与之前元素对比,发现其…

【C++期末编程题题库】代码+详解18道

适合期末复习c看,或者刚入门c的小白看,有的题会补充知识点,期末复习题的代码一般比较简单,所以语法上没那么严谨。本文所有题目要求全在代码块的最上面。 目录 1、设计复数类 2、设计Computer类 3、实现相加的函数模板 4、圆类…

全网最简单vscode使用Makefile调试多文件的C/C++代码

前言 vscode调试C/C教程很多&#xff0c;操作麻烦&#xff0c;这里试图找到一个最简单的使用vscode调试C/C代码的方法。这里是使用Makefile的多文件方式。 测试文件 tree . ├── func.c ├── func.h ├── main.c └── Makefilefun.c #include <stdio.h> #in…

对低效的会议说“不!”

根据微软对全球 31, 000 名员工开展的一项调查&#xff0c;低效的会议是影响工作效率的第一大干扰因素&#xff0c;其次是召开过多的会议。 大大小小的同步会、讨论会、审查会、复盘会不仅将工作时间拆解得支离破碎&#xff0c;还会让成员因「会议恢复综合症」而无法立即从无效…

Certum与Geotrust的OV多域名证书

Certum和Geotrust都是知名的CA认证机构&#xff0c;旗下的SSL证书产品丰富&#xff0c;有单域名SSL证书、多域名SSL证书以及通配符SSL证书。这些SSL数字证书作为一种重要的网络安全产品&#xff0c;能够实现数据加密和身份验证&#xff0c;保障网站的安全性和隐私性。OV多域名S…

【快速全面掌握 WAMPServer】14.各种组件的升级方法

网管小贾 / sysadm.cc WAMPServer 更新很快&#xff0c;这是件好事&#xff01; 但是 WAMPServer 更新快是因为他很勤劳吗&#xff1f; 其实这个问题的原因并不是出自 WAMPServer 自身&#xff0c;而是来自它的各个组件。 是的&#xff0c;你能想像得到&#xff0c;比如 PHP…

数据结构和算法-数据结构的基本概念和三要素和数据类型和抽象数据类型

文章目录 总览数据结构的基本概念总览数据早期和现代的计算机处理的数据数据元素-描述一个个体数据对象-一类数据元素什么是数据结构小结 数据结构的三要素总览逻辑结构-集合结构逻辑结构-线性结构逻辑结构-树形结构逻辑结构-图形结构逻辑结构-小结数据的运算物理结构&#xff…

Struts2 远程代码执行漏洞S2-001分析

自 Struts2 在 2007 年爆出第一个远程代码执行漏洞 S2-001 以来&#xff0c;在其后续的发展过程中不断爆出更多而且危害更大的远程代码执行漏洞&#xff0c;而造成 Struts2 这么多 RCE 漏洞的主要原因就是 OGNL 表达式。这里以 Struts2 的第一个漏洞 S2-001 为例来对 Struts2 远…

新年启新程 | 开门红!菊风中标重庆三峡银行双录及产品销售可回溯系统项目

INTRODUCTION 近年来&#xff0c;随着人们需求的转变和金融科技的高速发展&#xff0c;银行开始朝着数智化方向转型。为顺应客户行为变迁&#xff0c;银行同业积极构建远程银行云服务生态。同时&#xff0c;面对业务的升级以及新的监管要求&#xff0c;现有音视频功能难以满足…

第三届先进控制、自动化与机器人国际会议(ICACAR 2024) | Ei、Scopus双检索

会议简介 Brief Introduction 2024年第三届先进控制、自动化与机器人国际会议(ICACAR 2024) 会议时间&#xff1a;2024年5月24-26日 召开地点&#xff1a;中国重庆 大会官网&#xff1a;ICACAR 2024-2024 3rd International Conference on Advanced Control, Automation and Ro…

yolov8 tracking编码为web 和 rtsp流输出

1 基础工作 打开cmd 输入 conda env list 输入 conda activate py38 查看 nvidia-smi 查看 nvcc&#xff0c;如下图所示 cuda为11.7 &#xff0c;为确认可以查看program files 下面的cuda 安装&#xff0c;看到11.7 就行了&#xff0c;读者可以自行确认自己的版本。 查看nvid…

第 378 场 LeetCode 周赛题解

A 检查按位或是否存在尾随零 枚举&#xff1a;枚举两个元素的组合即可 class Solution { public:bool hasTrailingZeros(vector<int> &nums) {int n nums.size();for (int i 0; i < n; i)for (int j 0; j < i; j)if ((nums[i] | nums[j]) % 2 0)return tru…

无痛迁移:图解 Kubernetes 集群升级步骤

本文探究了Kubeadm集群升级工作流程&#xff0c;并以可视化方式展现。着重介绍了控制平面节点和工作节点的升级步骤&#xff0c;涵盖了kubeadm升级、节点清空、kubelet和kubectl升级&#xff0c;以及解除节点封锁的关键步骤。 这个简明扼要的指南可帮助用户理解和执行Kubernete…