vue3 【实战】封装 “心跳“ 组件

需求描述

在控制台每秒打印一个"hello"

代码实现

html 复制代码
<script setup>
import { onMounted, onBeforeUnmount, ref } from "vue";

const timer = ref(0);

onMounted(() => {
  function fn() {
    console.log("hello");
    timer.value = setTimeout(fn, 1000);
  }

  timer.value = setTimeout(fn, 1000);
});

onBeforeUnmount(() => {
  clearTimeout(timer.value);
});
</script>

<template>
  <div>心跳</div>
</template>

技术要点

  • 卸载组件时,一定要记得清除定时器、自定义事件、DOM事件,避免内存泄漏/其他业务干扰
  • 本例中使用 setTimeout 递归比 setInterval 更好,因为若页面出现卡顿,setInterval 也会中断
相关推荐
夏幻灵12 小时前
Vue 2 与 Vue 3 在应用初始化上的设计差异与技术演进
前端·javascript·vue.js
Sterting16 小时前
Form表单与校验
javascript·vue.js·elementui
cyadyx20 小时前
【vue】Pinia相对Vuex
前端·javascript·vue.js
Sterting1 天前
第9课 Vue Router 路由
前端·vue.js
满栀5851 天前
vue动态路由效果
前端·javascript·vue.js·前端框架·vue
心运软件1 天前
SpringBoot+ Vue校园社团管理平台的完整架构设计
vue.js·后端
jjw_zyfx2 天前
css vue vite实现闪烁的呼吸效果
javascript·css·vue.js
浅水壁虎2 天前
vue基础(第四章 Pinia)
前端·javascript·vue.js
学习星球2 天前
Vue 3 实战:拆解 RealWorld 项目
前端·vue.js
大家的林语冰2 天前
👉 尤雨溪再次成立新公司,同时官宣 Pinia 4 正式发布!
前端·javascript·vue.js