10月25日

1. ES6 模块导入语法(import)

  • 带 {} 的 import(解构导入):导入模块中按名字导出的(named exports)。
  • 不带 {} 的 import:导入模块中默认导出的(default export)。
  1. 默认导出(default export)

导出时这样写:

utils/request.js

javascript 复制代码
export default {
  get() {},
  post() {}
}

导入时写法是:

javascript 复制代码
import request from '../utils/request'

特点:

default 导出的模块可以用 任意名字 接收;

因为一个文件只能有 一个默认导出。

例如:

javascript 复制代码
import abc from '../utils/request' // 也能用abc代替request
  1. 命名导出(named export)

导出时这样写:

vue内部就是这种

javascript 复制代码
export function reactive() {}
export function getCurrentInstance() {}

或:

javascript 复制代码
// 另一种写法
function reactive() {}
function getCurrentInstance() {}

export { reactive, getCurrentInstance }

导入时要写成:

javascript 复制代码
import { reactive, getCurrentInstance } from 'vue';

特点:

必须用 花括号 {};

名字 必须完全匹配 导出的名字;

一个文件可以导出多个命名成员。

2. 生命周期钩子

Vue 组件的"生命周期钩子"就是在组件从创建到销毁的整个过程中,Vue 自动触发的一系列回调函数。

你可以在这些时机点上,插入自己的逻辑。

阶段 选项式 API 写法 组合式 API 写法 触发时机
🧱 创建阶段 beforeCreate() ❌(不支持,setup 前执行) 组件实例刚被创建,dataprops 还没初始化
created() ❌(不支持,setup 时执行) 数据已初始化,但 DOM 还没生成
🧩 挂载阶段 beforeMount() onBeforeMount() 模板还未挂载到真实 DOM 上
mounted() onMounted() 模板渲染完,DOM 已插入页面
🔄 更新阶段 beforeUpdate() onBeforeUpdate() 响应式数据更新前(DOM 还没变)
updated() onUpdated() 响应式数据更新后(DOM 已更新)
❌ 卸载阶段 beforeUnmount() onBeforeUnmount() 组件将要销毁(可清理定时器等)
unmounted() onUnmounted() 组件已销毁(DOM 已移除)
🧭 错误捕获 errorCaptured(err, vm, info) onErrorCaptured() 子组件发生错误时触发
🌐 路由组件专用 activated() onActivated() <KeepAlive> 缓存组件被激活时
deactivated() onDeactivated() <KeepAlive> 缓存组件被隐藏时

Vue 3 生命周期执行顺序

复制代码
beforeCreate → created → beforeMount → mounted → beforeUpdate → updated → beforeUnmount → unmounted

注意:

在 Vue 3 的 <script setup> 语法中,

beforeCreate 和 created 已经被「合并进 setup」阶段了,

即 setup 执行时间 ≈ created。

常用的生命周期用途

钩子 常见用途
onMounted 初始化数据、访问 DOM、调用接口
onBeforeUpdate 更新前做数据快照
onUpdated 数据更新后调整样式或位置
onBeforeUnmount 清理定时器、事件监听器
onUnmounted 释放资源、断开连接
onErrorCaptured 捕获子组件的错误日志

3. onMounted() 执行细节

我们细分三种情况来看:

  1. 刷新浏览器(F5 / Ctrl+R)

整个应用会被销毁并重新创建:

根组件重新挂载;

当前页面组件也重新创建;

所以 onMounted() 一定会执行。

例如:

javascript 复制代码
onMounted(() => {
  console.log("页面挂载:执行初始化逻辑");
});

刷新后你会看到控制台打印一次。

  1. 从其他路由跳转到当前页面

比如从 /home → /user:

/user 对应的组件会新创建并挂载;

所以 onMounted() 也会执行。

换句话说:
每次切换"不同的组件页面",新的组件都会走一次完整生命周期

setup() → onMounted()。

  1. 组件被 <keep-alive> 缓存的情况

如果你的 <RouterView /> 是包在 <keep-alive>里的,比如:

复制代码
<keep-alive>
  <RouterView />
</keep-alive>

那被缓存的组件在切换回来时不会重新挂载。

此时:

不会执行 onMounted()

会执行 onActivated()

例子:

复制代码
onMounted(() => {
  console.log('第一次进入页面');
});
onActivated(() => {
  console.log('再次返回页面');
});

结果:

第一次进入:打印"第一次进入页面"

第二次返回(从别的路由回来):打印"再次返回页面"

相关推荐
小二·13 小时前
前端监控体系完全指南:从错误捕获到用户行为分析(Vue 3 + Sentry + Web Vitals)
前端·vue.js·sentry
阿珊和她的猫14 小时前
IIFE:JavaScript 中的立即调用函数表达式
开发语言·javascript·状态模式
阿珊和她的猫14 小时前
`require` 与 `import` 的区别剖析
前端·webpack
+VX:Fegn089514 小时前
计算机毕业设计|基于springboot + vue在线音乐播放系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
智商偏低14 小时前
JSEncrypt
javascript
谎言西西里14 小时前
零基础 Coze + 前端 Vue3 边玩边开发:宠物冰球运动员生成器
前端·coze
+VX:Fegn089514 小时前
计算机毕业设计|基于springboot + vue律师咨询系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
努力的小郑15 小时前
2025年度总结:当我在 Cursor 里敲下 Tab 的那一刻,我知道时代变了
前端·后端·ai编程
GIS之路15 小时前
GDAL 实现数据空间查询
前端
OEC小胖胖15 小时前
01|从 Monorepo 到发布产物:React 仓库全景与构建链路
前端·react.js·前端框架