03-Vue技术栈之生命周期

news/2024/12/2 21:35:16/

目录

  • 1、什么是生命周期
  • 2、分析生命周期
    • 2.1 生命周期钩子函数
    • 2.2 生命周期钩子函数的作用
    • 2.3 生命周期钩子函数图例
    • 2.4 生命周期钩子函数的应用
  • 3、生命周期总结

1、什么是生命周期

  1. 又名:生命周期回调函数生命周期函数生命周期钩子
  2. 是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数
  3. 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的
  4. 生命周期函数中的this指向vm组件实例对象

2、分析生命周期

2.1 生命周期钩子函数

  • 每个Vue实例在创建时都要经过一系列的初始化过程。例如,需要设置数据侦听编译些生命周期钩子函数,给用户在不同阶段添加代码的机会。

2.2 生命周期钩子函数的作用

  • 有一些其他钩子,在实例生命周期的不同阶段被调用,如 mounted, updateddestroyed
  • 生命周期钩子的 this关键字上下文指向调用它的 Vue 实例,调用方法如 this.$el。

注:不能使用箭头函数(()=>)定义一个生命周期方法,如created:()=> this.fetchTodos()
这是因为箭头函数绑定了父上下文,因此 this与期待的Vue实例不同,this.fechTodos()的行为未定义。

2.3 生命周期钩子函数图例

请添加图片描述

基本语法:

			beforeCreate() {console.log('beforeCreate')},created() {console.log('created')},beforeMount() {console.log('beforeMount')},mounted() {console.log('mounted')},beforeUpdate() {console.log('beforeUpdate')},updated() {console.log('updated')},beforeDestroy() {console.log('beforeDestroy')},destroyed() {console.log('destroyed')}

语法说明:

Vue 实例有一个完整的生命周期,即 Vue 实例从创建到销毁的过程。具体可细分为开始 创建、初始化数据、编译模板、挂载 DOM 渲染、更新渲染、卸载等一系列过程,称为 Vue 的生命周期。在 Vue 的整个生命周期中,提供了一些生命周期钩子函数,为执行自定义逻辑 提供了机会。

  1. beforeCreate:在实例初始化之后,数据观测和 event/watch 事件配置之前被调用。

  2. created:实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测、属性和方法的运算、event/watch
    事件回调。然而,挂载阶段还没有开始,$el 属性目前不可见。

  3. beforeMount:在挂载开始之前被调用,相关的渲染函数首次被调用。在此阶段,它检查是否有任何模板可用于要在 DOM
    中呈现的对象:如果没有找到模板,那么将所定义元素的外部 HTML 视为模板。

  4. mounted:el 被新创建的 vm. $el 替换,并挂载到实例上,之后调用该钩子。一旦模板准备就绪,它将数据放入模板并创建可呈现元素。

  5. beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。可以在此钩子中进一步更改状态,不会触发附加的重渲染过程。

  6. updated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在此之后调用该钩子。通过实际更新 DOM 对象并触发updated 钩子,屏幕上的变化得到呈现。

  7. beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。在 Vue 对象被破坏并从内存中释放之前,beforeDestroy 钩子被触发,并允许在其中处理自定义代码。

  8. destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑,所有事件侦听器会被移除,所有子实例也会被销毁。该钩子在服务器端渲染期间不被调用。 可以使用生命周期钩子函数在 Vue对象生命周期的不同阶段添加自定义代码。它将帮助 设计人员控制在 DOM 中创建对象的流程,以及更新和删除对象。

    完整生命周期钩子函数调用关系如下图所示:

请添加图片描述

2.4 生命周期钩子函数的应用

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
</head><body><div id="root"><h3>{{information}}</h3><button @click="changeInformation">改变信息</button><button @click="destroyVM">销毁Vue实例</button></div><script>new Vue({el: '#root',data() {return {information: '东方青云欢迎您'}},methods: {changeInformation() {this.information = '我来了,您在哪里?'},destroyVM() {this.$destroy()//销毁Vue实例}},beforeCreate() {console.log('=====beforeCreate=====')console.log('el:' + this.$el)//未定义console.log("data:" + this.$data)//未定义console.log('=====beforeCreate=====')},created() {console.log('====created=====');console.log('el:' + this.$el)//未定义console.log("data:" + this.$data)//已被初始化为[object Object]console.log("information:" + this.information);//information:东方青云欢迎您console.log('====created=====');},beforeMount() {console.log('====beforeMount====');console.log('el:' + this.$el);//el:[object HTMLDivElement]console.log(this.$el);//当前挂载元素document.querySelector('h3').innerText = '1'//无效,虚拟dom},mounted() {// document.querySelector('h3').innerText = '1'//有效,已转化为真实dom},beforeUpdate() {console.log('====beforeUpdate====');console.log(this.information);// debugger;//断点调试},updated() {console.log(this.information);},beforeDestroy() {console.log('我要被销毁了');},destroyed() {console.log('销毁完毕');},})</script>
</body></html>

3、生命周期总结

常用的生命周期钩子:

  1. mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。
  2. beforeDestroy: 清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。

关于销毁Vue实例:

  1. 销毁后借助Vue开发者工具看不到任何信息。
  2. 销毁后自定义事件会失效,但原生DOM事件依然有效
  3. 一般不会在beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了。

http://www.ppmy.cn/news/56070.html

相关文章

iOS可视化动态绘制八种排序过程

一、可视化解决方案综述 1.交互UI综述 在本篇博客的第一部分我们先来整体的看一下我们Demo的功能。下方就是我们今天博客中的Demo的交互示意图。上方的输入框可以输入要排序元素的个数&#xff0c;下方输入的是300。程序会根据你输入的个数来随机生成数据&#xff0c;你输入30…

数字化转型导师坚鹏:BLM企业数字化转型战略

BLM企业数字化转型战略 ——以BLM模型为核心&#xff0c;实现知行果合一 课程背景&#xff1a; 很多企业存在以下问题&#xff1a; 不知道企业如何制定数字化转型战略&#xff1f; 不清楚其它企业数字化转型战略是如何制定的&#xff1f; 不知道其它企业数字化转型战略…

嵌入式Sqlite数据库【基本语法、Sqlite-JDBC、嵌入到Java程序】

目录 前言 基本介绍 Sqlite 对比 MySQL 字段类型 语法 创建表 插入数据 更新数据 查询数据 删除数据 查看建表语句 Sqlite-JDBC 嵌入到Java程序 前言 最近在用JavaFX做一个桌面软件需要用到数据库&#xff0c;但MySQL这种数据库明显只能本地访问&#xff0c;把软…

【物联网】物1— 初步认识MQTT、连接到MQTT服务端

目录 一、MQTT是什么 二、MQTT的版本 两者之间的关系&#xff1a; ​三、MQTT工作的基本原理 3.1、概念 MQTT客户端&#xff1a; MQTT服务端&#xff1a; MQTT主题&#xff1a; 3.2、MQTT订阅/发布主题的特点 相互可独立性&#xff1a; 空间可分离&#xff1a; 时间…

推荐一款网站内链爬取python脚本

目标 使用 web-tools 提供的webSpider来爬取网站内链&#xff0c;并且将其导出。 webSpider介绍&#xff1a; 官网链接&#xff1a;https://web-tools.cn/web-spider 仓库地址&#xff1a;https://github.com/duerhong/web-spider Web Spider 专门用于爬取网站内链&#xf…

面试题复习

闭包造成的内存泄漏如何回收&#xff1f; 方法一&#xff1a;将闭包内部使用的外部变量改为局部变量&#xff0c;让垃圾回收机制自动回收。 function foo() {let bar bar;return function() {let localBar bar; // 将 bar 变量作为局部变量使用console.log(localBar);} }le…

C#开发的OpenRA游戏的创建基地工程车

C#开发的OpenRA游戏的创建基地工程车 OpenRA游戏里,如果不是任务性的目标,一般都需要创建一个基地工程车。 因为这个游戏所有的起点,就是一台基地工程车,只有建立基地, 才能创建其它所有物品,比如发电工厂、炼矿工厂、兵工厂, 只有这样之后,才能去制造各个兵种,才能制…

clickhouse hot/cold存储策略

背景 一般来说&#xff0c;我们的物理机上都会有少量的ssd磁盘以及大容量的hdd硬盘&#xff0c;我们总是希望访问比较频繁的数据可以放在ssd上加快访问速度&#xff0c;这样就也就意味着clickhouse表的数据存储要分成hot和cold两种策略&#xff0c;甚至要包含数据删除的策略&a…