JS 框架 词条目录
前端Wiki/JS 框架/进阶/Vue 3 进阶

生命周期

组件从创建到销毁会经历固定阶段,每个阶段有对应的生命周期钩子,让我们能在恰当时机插入自己的逻辑。完整顺序:setup(组件创建,逻辑初始化)→ onMounted(挂载完成,页面能看到组件了)→ onUpdated(响应式数据导致视图更新后)→ onUnmounted(卸载前)。

最常用的是首尾两个:onMounted 里做「页面就绪后才能做的事」——发请求拉数据、初始化图表库、读取 DOM 尺寸;onUnmounted 里做「善后」——清除定时器、解绑全局事件、取消未完成的请求。漏掉清理是内存泄漏的头号来源:组件都销毁了,定时器还在跑。

日常开发 80% 的场景只需要 onMounted 和 onUnmounted,其余用到再查。别在 onMounted 之前访问 DOM——那时元素还不存在。

本节要点常用钩子:onMounted 发请求/初始化,onUnmounted 清定时器/解绑事件;记住「挂载后才能碰 DOM」。
代码
<script setup>
import { ref, onMounted, onUpdated, onUnmounted } from 'vue';

const list = ref([]);
let timer = null;

// 挂载完成:DOM 已就绪,适合发请求、初始化
onMounted(async () => {
  console.log('mounted:页面已经能看到组件了');
  timer = setInterval(() => console.log('轮询中……'), 3000);
  // const data = await fetch('/api/list'); ...
});

// 视图因数据变化而更新后触发
onUpdated(() => {
  console.log('updated:视图刚更新过(别在这里改数据,会死循环)');
});

// 卸载前:必须清理副作用,否则内存泄漏
onUnmounted(() => {
  clearInterval(timer);                 // 清定时器
  window.removeEventListener('resize', onResize); // 解绑全局事件
  console.log('unmounted:组件已卸载,善后完毕');
});

function onResize() { /* ... */ }
</script>

<!-- 执行顺序:setup → onMounted → onUpdated → onUnmounted -->
🔗 相关词条DOM元素组件事件