程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Vue2

  • Vue3

    • 初识Vue3
    • 组合式API
    • Vue3中的data数据
    • vue3 的 script标签
    • setup函数中执行顺序
    • toRefs() 与 toRef()
    • computed()
    • Vue3弱化this
    • watch() 和 watchEffec()
    • define函数用法
    • defineExpose() 和 ref 属性
    • vue.config.js
    • 生命周期
      • 1. 概念
      • 2. 生命周期阶段
      • 3. Vue2 和 Vue3 的生命周期对比
      • 4. 重点不同之处
      • 5. 常用的钩子
      • 6. 生命周期钩子的示例
    • Vue3全局API调用
    • 自定义 Hook
    • 传递数据(props)
    • 路由
    • pinia
    • 组件通信
    • getCurrentInstance() 和 nextTick()
    • Vue3 新组件
  • vue3 + TS 项目集成

  • Vue全家桶
  • Vue3
scholar
2024-08-05
目录

生命周期

# 生命周期

# 1. 概念

Vue 组件实例在创建时要经历一系列的初始化步骤。在此过程中,Vue 会在合适的时机调用特定的函数,让开发者有机会在特定阶段运行自己的代码,这些特定的函数统称为生命周期钩子。

# 2. 生命周期阶段

生命周期整体分为四个阶段,分别是:创建、挂载、更新、销毁。每个阶段都有两个钩子,一前一后。

# 3. Vue2 和 Vue3 的生命周期对比

以下是 Vue2 和 Vue3 的生命周期钩子的对比表格,重点标记了两者之间的不同之处。

阶段 Vue2 生命周期钩子 Vue3 生命周期钩子 备注
创建 beforeCreate setup Vue3 使用 setup 取代了 beforeCreate 和 created
created
挂载 beforeMount onBeforeMount
mounted onMounted
更新 beforeUpdate onBeforeUpdate
updated onUpdated
销毁 beforeDestroy onBeforeUnmount Vue3 使用 onBeforeUnmount 取代了 beforeDestroy
destroyed onUnmounted Vue3 使用 onUnmounted 取代了 destroyed

# 4. 重点不同之处

  • 创建阶段:

    • Vue2 的 beforeCreate 和 created 钩子在 Vue3 中被 setup 钩子取代。
    • setup 是 Vue3 新增的组合式 API,用于初始化数据和方法。
  • 销毁阶段:

    • Vue2 的 beforeDestroy 钩子在 Vue3 中被 onBeforeUnmount 取代。
    • Vue2 的 destroyed 钩子在 Vue3 中被 onUnmounted 取代。

# 5. 常用的钩子

  • onMounted:挂载完毕。
  • onUpdated:更新完毕。
  • onBeforeUnmount:卸载之前。

# 6. 生命周期钩子的示例

以下是一个使用 Vue3 生命周期钩子的示例,详细展示每个钩子的用法和触发时机。

<template>
  <div class="person">
    <h2>当前求和为:{{ sum }}</h2>
    <button @click="changeSum">点我sum+1</button>
  </div>
</template>

<!-- Vue3 写法 -->
<script lang="ts" setup name="Person">
import { 
  ref, 
  onBeforeMount, 
  onMounted, 
  onBeforeUpdate, 
  onUpdated, 
  onBeforeUnmount, 
  onUnmounted 
} from 'vue';

// 数据
let sum = ref(0);

// 方法
function changeSum() {
  sum.value += 1;
}

console.log('setup'); // 组件初始化时打印

// 生命周期钩子

// 挂载阶段
onBeforeMount(() => {
  console.log('挂载之前'); // 在挂载开始之前调用
});
onMounted(() => {
  console.log('挂载完毕'); // 实例被挂载后调用
});

// 更新阶段
onBeforeUpdate(() => {
  console.log('更新之前'); // 数据更新之前调用
});
onUpdated(() => {
  console.log('更新完毕'); // 数据更新完成并且 DOM 重新渲染之后调用
});

// 销毁阶段
onBeforeUnmount(() => {
  console.log('卸载之前'); // 实例卸载之前调用
});
onUnmounted(() => {
  console.log('卸载完毕'); // 实例卸载之后调用
});
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
  • 创建阶段:

    • 在 Vue2 中,beforeCreate 在实例初始化之后调用,但尚未进行任何数据观测和事件配置。created 在实例创建完成后调用,数据观测和事件配置已经完成,但实例还未挂载到 DOM 上。
    • 在 Vue3 中,setup 是一个新的生命周期钩子,用于取代 beforeCreate 和 created。setup 在实例创建之初调用,用于初始化数据和方法,并且可以返回一个对象,包含组件的响应式数据和方法。
  • 挂载阶段:

    • onBeforeMount 在挂载开始之前调用,可以在此时进行一些初始化工作。
    • onMounted 在实例被挂载后调用,可以在此时进行一些需要 DOM 的操作。
  • 更新阶段:

    • onBeforeUpdate 在数据更新之前调用,可以在此时进行一些准备工作。
    • onUpdated 在数据更新完成并且 DOM 重新渲染之后调用,可以在此时进行一些后续处理。
  • 销毁阶段:

    • 在 Vue2 中,beforeDestroy 在实例销毁之前调用。destroyed 在实例销毁之后调用。
    • 在 Vue3 中,onBeforeUnmount 取代了 beforeDestroy,在实例卸载之前调用。onUnmounted 取代了 destroyed,在实例卸载之后调用。
编辑此页 (opens new window)
上次更新: 2025/01/30, 23:55:43
vue.config.js
Vue3全局API调用

← vue.config.js Vue3全局API调用→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式