【前端】Vue生命周期函数(详细讲解+中文图解)

目录

  • 一、何为生命周期
    • 1、含义
    • 2、理解
  • 二、生命周期定义(官网)
    • 1、vue2
    • 2、vue3
  • 三、生命周期图解
    • 1、vue2生命周期图解
    • 2、vue3生命周期图解
  • 四、Vue的生命周期
  • 五、Vue2生命周期和Vue3生命周期的区别
  • 六、Vue生命周期的主要阶段以及8个周期函数
    • 1、options API和composition API
    • 2、创建阶段(初始化相关属性):beforeCreate()、created()
    • 2、挂载前阶段:beforeMount()、onBeforeMount()
    • 3、挂载后阶段:mounted()、onMounted()
    • 4、更新阶段(元素或组件的变更操作):beforeUpdate()、updated()、onBeforeUpdate()、onUpdated()
    • 5、销毁阶段(销毁相关属性):beforeUnmount()和onBeforeUnmounted()、unmounted()和onUnmounted()
  • 七、面试题
    • 1、常用的vue的生命周期是哪些?
      • ①、要点
    • 2、如果组件存在父子关系时,父组件(A)与子组件(B)生命周期执行的顺序时怎样的?
      • ①、思路
      • ②、答案

一、何为生命周期

1、含义

  • 生命周期:从vue实例产生开始到vue实例被销魂这段时间所经历的过程

2、理解

  • vue实例的创建和销毁过程好比人的一生从出现到死亡过程。在其中一些重大经历,也就是特殊时间点,我们可以做什么事情
  • 在vue的一生中,从vue组件创建开始一直到其被销毁时的时间段中,也被建立了几个特殊的时间点,为了方便开发者实现在特定的时候让vue在特定的时间做特定的事情。通过一个叫做“生命周期钩子函数”的方法进行设置。在vue中,vue的一生被8个生命周期钩子函数给支配着。
  • 也可以理解为回调函数,当我们写了周期函数后,在规定的时间点,vue会自动执行这个函数

钩子函数:可以简单理解为是一种系统在不同的阶段自动执行、用户无须干预的函数

二、生命周期定义(官网)

1、vue2

Vue2生命周期

2、vue3

Vue3生命周期

三、生命周期图解

1、vue2生命周期图解

在这里插入图片描述

2、vue3生命周期图解

在这里插入图片描述

四、Vue的生命周期

在这里插入图片描述

主要Vue生命周期事件被分为两个钩子,分别在事件之前和事件之后调用,vue应用程序中有4个主要事件(8个钩子)

● 创建–在组件创建时执行
● 挂载–DOM被挂载时执行
● 更新–当响应数据被修改时执行
● 销毁–在元素被销毁之前立即执行

五、Vue2生命周期和Vue3生命周期的区别

在这里插入图片描述

六、Vue生命周期的主要阶段以及8个周期函数

1、options API和composition API

在【options API】中,生命周期钩子是被暴露在vue实例上的选项,我们只需要调用使用即可
在【composition API】中,我们需要将生命周期钩子引入项目,才能使用

import { onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted } from 'vue'

在这里插入图片描述
组合API中,使用setup()方法替换了beforeCreate和created,那么这两个生命周期中的方法将放在setup()中执行

2、创建阶段(初始化相关属性):beforeCreate()、created()

  • beforeCreate
  • 注意点:在此时不能获取data中的数据,也就是说this.$data得到的是undefined
  • created

2、挂载前阶段:beforeMount()、onBeforeMount()

  1. 在组件DOM实际渲染之前调用,此时根元素还不在,在选项API中,可以使用this.$data来访问;在组合API中,想访问的话就必须在根元素上使用ref
import { ref, onBeforeMount } from "vue";export default {setup() {console.log("setup,创建前后")const count = ref({str: '你好',number: 123})onBeforeMount(() => {console.log("onBeforeMount -- composition API", "挂载前",count.value.str)})return {count,}},data(){return{number: 123}},beforeMount() {console.log("beforeMount -- options API,挂载前",this.$data.number)},

在这里插入图片描述

3、挂载后阶段:mounted()、onMounted()

  1. mounted()、onMounted()【页面加载完毕的时候就是此时】
  2. 注意点:默认情况下,在组件的生命周期中只会触发一次
import { ref, onMounted } from "vue";export default {setup() {console.log("setup,创建前后")const count = ref({str: '你好',number: 123})onMounted(() => {console.log("onMounted -- composition API", "挂载前",count.value.str)})return {count,}},data(){return{number: 123}},mounted() {console.log("mounted -- options API,挂载前",this.$data.number)},

在这里插入图片描述

4、更新阶段(元素或组件的变更操作):beforeUpdate()、updated()、onBeforeUpdate()、onUpdated()

  1. 数据更新时调用,DOM更新后,updated()、onUpdated()方法就会调用
  2. 可以重复触发的
<template><div><h1>Hello World</h1>{{ count.str }}<button @click="changeStr">修改str的按钮</button></div><hr /><div><h1>Hello World</h1>{{ this.$data.number }}<button @click="changeNumber">修改number的按钮</button></div>
</template><script>import { ref, onBeforeUpdate, onUpdated } from "vue";export default {//Vue3写法setup() {console.log("setup,创建前后")const count = ref({str: '你好',number: 123})onBeforeUpdate(() => {console.log("onBeforeUpdate -- composition API", "更新前")})onUpdated(() => {console.log("onUpdated -- composition API", "更新后",count.value.str)})function changeStr() {count.value.str = "已修改"}return {count,changeStr}},//Vue2写法data(){return{number: 123}},methods: {changeNumber() {this.$data.number = 456}},beforeUpdate() {console.log("beforeUpdate -- options API,更新前")},updated() {console.log("updated -- options API,更新后",this.$data.number)},}
</script>

在这里插入图片描述

5、销毁阶段(销毁相关属性):beforeUnmount()和onBeforeUnmounted()、unmounted()和onUnmounted()

何时触发?:关闭页面(不是浏览器)

<script>
import { ref, onBeforeUnmount, onUnmounted } from "vue";export default {setup() {onBeforeUnmount(() => {console.log("onBeforeUnmount -- composition API", "销毁前")})onUnmounted(() => {console.log("onUnmounted -- composition API", "销毁后")})},beforeUnmount() {console.log("beforeUnmount -- options API,销毁前")},unmounted() {console.log("unmounted -- options API,销毁后")}
}
</script>

在这里插入图片描述

七、面试题

1、常用的vue的生命周期是哪些?

①、要点

4阶段,8个周期函数

2、如果组件存在父子关系时,父组件(A)与子组件(B)生命周期执行的顺序时怎样的?

①、思路

  • A组件有8个常用周期:创建2个、挂载2个、更新2个、销毁2个
  • B组件有8个常用周期:创建2个、挂载2个、更新2个、销毁2个

②、答案

  • 将8个周期划分为三阶段(1-4,5-6,7-8)
  • 渲染阶段:父1 → 父2 → 父3 → 子1 → 子2 → 子3 → 子4 → 父4
  • 更新阶段:父5 → 子5 → 子6 → 父6
  • 更新阶段:父5 → 子5 → 子6 → 父6

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用MyEclipse如何部署Descriptor (XML)编辑器?

Descriptor (XML) Editor编辑器包含了高级的XML编辑功能&#xff0c;在本文中您将了解到这些编辑功能、Web XML编辑等&#xff0c;此功能包含在MyEclipse中可用。 MyEclipse v2023.1.2离线版下载 1. Web XML 编辑器 MyEclipse Web XML编辑器包括高级XML编辑功能&#xff0c;…

OpenLayers入门,OpenLayers涂鸦手绘线条、圆形和多边形,涂鸦线条自动收尾连接成多边形

专栏目录: OpenLayers入门教程汇总目录 前言 本章再次讲解OpenLayers绘制图形功能,上一章中《OpenLayers图形绘制,OpenLayers实现在地图上绘制线段、圆形和多边形》我们已经讲过多种图形的绘制,本章主要讲解自由涂鸦手绘绘制线条,圆形和任意形状。 二、依赖和使用 &q…

C#在自动化领域的应用前景与潜力

人机界面&#xff08;HMI&#xff09;开发&#xff1a;使用C#开发人机界面软件&#xff0c;实现与自动化设备的交互和监控。C#的图形界面设计能力和丰富的控件库使得开发人员能够创建直观、易用的界面。 数据采集与处理&#xff1a;C#可以与各种传感器、设备进行数据通信和采集…

xml布局不显示的编写代码方法

新建项目在新项目用dp编写布局复制粘贴去掉所有dp在复制dimen/dp_

【数据结构与算法——TypeScript】哈希表

【数据结构与算法——TypeScript】 哈希表(HashTable) 哈希表介绍和特性 哈希表是一种非常重要的数据结构&#xff0c;但是很多学习编程的人一直搞不懂哈希表到底是如何实现的。 在这一章节中&#xff0c;我门就一点点来实现一个自己的哈希表。通过实现来理解哈希表背后的原理…

抖音的竞争对手?Meta计划人工智能聊天机器人增加社交媒体数量

在来自抖音的竞争中&#xff0c;Meta着眼于用户参与的下一个前沿。 报道&#xff0c;Meta正在开发一系列具有不同个性的人工智能聊天机器人&#xff0c;此举旨在增加用户在脸书和Instagram等社交平台上的参与度金融时报和边缘。这些聊天机器人被Meta staff称为“personas ”,将…

snowboy+sherpa-onnx+Rasa+Coqui实现语音音箱【语音助手】

背景 本系列主要目标初步完成一款智能音箱的基础功能&#xff0c;包括语音唤醒、语音识别(语音转文字)、处理用户请求&#xff08;比如查天气等&#xff0c;主要通过rasa自己定义意图实现&#xff09;、语音合成(文字转语音)功能。 coqui主要在项目中完成接收rasa响应的内容&…

苹果照片删除了如何恢复回来?4种方法教你快速恢复!

相信大家平时都有使用苹果手机来记录生活的习惯吧&#xff1f;但有时候可能会不小心将一些重要的照片误删&#xff0c;或者因为手机内存不足而清理了大量照片&#xff0c;最后才发现照片有用却被你删掉了。那么苹果照片删除了如何恢复回来呢&#xff1f;别着急&#xff0c;接下…

阿里云容器服务助力极氪荣获 FinOps 先锋实践者

作者&#xff1a;海迩 可信云评估是中国信息通信研究院下属的云计算服务和软件的专业评估体系&#xff0c;自 2013 年起历经十年发展&#xff0c;可信云服务评估体系已日臻成熟&#xff0c;成为政府支撑、行业规范、用户选型的重要参考。 2022 年 5 月国务院国资委制定印发《…

一文详解 DolphinDB SQL 标准化

为了提升用户体验&#xff0c;降低用户学习成本和脚本迁移复杂度&#xff0c;自 1.30.17 / 2.00.5 版本开始&#xff0c;DolphinDB 逐步支持了标准化 SQL 的书写方法&#xff1b;并于 1.30.22 / 2.00.10 版本起&#xff0c;对标准 SQL 的常用语法和关键字实现了兼容。 1. 与标…

个人对智能家居平台选择的思考

本人之前开发过不少MicroPython程序&#xff0c;其中涉及到自动化以及局域网控制思路&#xff0c;也可以作为智能家居的实现方式。而NodeMCUESPHome的方案具有方便添加硬件、容易更新程序和容量占用小的优势&#xff0c;本人也查看过相关教程后感觉部署ESPHome和编译固件的步骤…

【深度学习注意力机制系列】—— ECANet注意力机制(附pytorch实现)

ECANet&#xff08;Efficient Channel Attention Network&#xff09;是一种用于图像处理任务的神经网络架构&#xff0c;它在保持高效性的同时&#xff0c;有效地捕捉图像中的通道间关系&#xff0c;从而提升了特征表示的能力。ECANet通过引入通道注意力机制&#xff0c;以及在…