vue2知识点:生命周期(包含:生命周期介绍、生命周期钩子、整体流程图详解)

在这里插入图片描述

文章目录

一、生命周期介绍

在这里插入图片描述
在这里插入图片描述
注意点1: 生命周期钩子函数中this指代vue对象,注意和监视属性下面图1中的this做对比,别混。
(即:
计算属性使用同步操作的普通函数,this => vue
同步操作的箭头函数,this => window
监视属性的同步操作的普通函数,this => vue
同步操作的箭头函数,this => window,
异步操作的普通函数,this => window,
异步操作的箭头函数,this => vue,具体原因看下面图)。
在这里插入图片描述

二、生命周期钩子

在这里插入图片描述
每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如需要设置数据监听、编译模板、挂载实例到 DOM、在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,给予用户机会在一些特定的场景下添加他们自己的代码。
比如 created 钩子可以用来在一个实例被创建之后执行代码;
常用的生命周期钩子函数有:

  1. created: 实例创建完成后被立即调用
  2. mounted: 实例挂载完成后被立即调用
  3. beforeUpdate: 实例需要渲染之前调用
  4. updated: 实例更新后调用
  5. destroyed: Vue 实例销毁后调用

三、生命周期整体流程图(重要)

在这里插入图片描述
注意点1:

问题:钩子函数beforeCreate和created代表创建前和创建后,这个创建指的是谁?

答案:指的是“数据监测和数据代理”也就是data属性和属性的get()和set(),一定不是指代vue实例,千万别弄混。

注意点2:图中的判断元素“Has template option?”中的template 指的是图1元素(也就是data中的template属性),而不是图2元素(图2中的template 是标签)
在这里插入图片描述

图1

在这里插入图片描述

图2

注意点3:图3中的outerHtml指的是图4中绿色框内容,与其对立的interHtml指的才是红色框内容
在这里插入图片描述

图3

在这里插入图片描述

图4

注意点4:

问题:图5步骤会把之前生成内存中的虚拟DOM转成真实DOM,转成之后会往“vm.$el”上存了一份,问:为什么要保存一份?

答案:可以用在很多地方,比如vue提供了虚拟DOM和真实DOM比较算法,既然有比较那么去哪里拿虚拟DOM呢?诶,“vm.$el”上面就保存了可以直接使用。
在这里插入图片描述

图5

注意点5:

问题:图6中红框如何理解?,为啥最终都不奏效,注意这个“最终”字眼

原因:钩子函数beforeMount中无论做了什么操作都没用,因为执行到图7红框操作部分,只会把内存中虚拟DOM转为真实DOM插入页面中,会进行模板渲染覆盖,这样就会导致钩子函数beforeMount中无论做了什么操作都没用了。
在这里插入图片描述

图6

在这里插入图片描述

图7

注意点6:在div中定义模板和在data中定义模板,页面长得不一样。
举例说明:div中定义模板如图8,页面效果如图9,页面会发现root容器还在,而如果data中定义模板如图10,页面效果如图11,页面会发现root容器消失了。总结大白话就是说,如图12使用data中定义模板方式,会造成绿色框会替换掉红色框内容,就会造成原来红色框定义的x属性等等都消失了,都白写了。
在这里插入图片描述

图8

在这里插入图片描述

图9

在这里插入图片描述

图10

在这里插入图片描述

图11

在这里插入图片描述

图12

注意点7:面试官可能会问,在哪个钩子中页面和数据尚未保持同步啊?所谓数据未同步指的是data数据值已经改了,而页面却没进行动态更新。如图13
答案就是beforeUpdate钩子函数中
在这里插入图片描述

图13

注意点8:官网红框容易造成歧义
在这里插入图片描述
注意点9:一般不会在钩子函数beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了。大白话说就是哪怕钩子函数beforeDestroy中执行修改属性操作了,值也改变了,但是页面也不会触发更新操作了,即值改了 但页面不更新了。

注意点10:vue生命周期流程图中只展示了8个钩子,实际还有3个隐藏的钩子没显现出来,它们旨在特殊场合才会显示出来,即“实现路由切换”功能时才会讲诉这3个隐藏的钩子。

注意点11:
3个隐藏的钩子:nextTick、activated、deactivated
其中:nextTick请看3.24知识点,而activated、deactivated用于路由组件。
在这里插入图片描述

举例:代码说明

<div id="root">
    {{name}}
</div>
<script>
    var vm = new Vue({
        el:'#root',
        data:{
            name:'Tim'
        },
        created: function () {
            console.log('实例创建...');
        },
        mounted:function () {
            console.log('实例挂载...');
        },
        beforeUpdate:function () {
            console.log('实例将要更新...');
        },
        updated:function () {
            console.log('实例已更新...');
        },
        destroyed:function(){
            console.log('实例卸载...');
        }
    });
    //改变name
    vm.name = 'Cat';
    //vm.$destroy();//卸载
</script>

结果展示

在这里插入图片描述

本人其他相关文章链接

1.《基础篇第1章:vue2简介》包含Vue2知识点、个人总结的使用注意点及碰到的问题总结

2.《基础篇第2章:vue2基础》包含Vue2知识点、个人总结的使用注意点及碰到的问题总结

3.《进阶篇第3章:vue进阶-组件》包含组件、自定义事件、插槽、路由等等扩展知识点

4.《基础篇第4章》:使用vue脚手架创建项目

5.vue2知识点:数据代理

6.vue2知识点:事件处理

7.vue2知识点:列表渲染(包含:v-for、key、取值范围、列表过滤、列表排序、vue监视对象或数组的数据改变原理、总结vue数据监测)

8.vue2知识点:计算属性与监听属性

9.vue2知识点:生命周期(包含:生命周期介绍生命周期钩子、整体流程图详解)

10.vue2知识点:非单文件组件和单文件组件

11.vue2知识点:组件is属性

12.vue2知识点:组件模板定义

13.vue2知识点:组件的props属性、非props属性、props属性校验

14.vue2知识点:组件自定义事件

15.vue2知识点:组件插槽分发

16.vue2知识点:动态组件

17.vue2知识点:混入

18.vue2知识点:浏览器本地缓存

19.vue2知识点:全局事件总线(GlobalEventBus)

20.vue2知识点:消息订阅与发布

21.vue2知识点:nextTick语法

22.vue2知识点:Vue封装的过度与动画

23.vue2知识点:路由

24.vue2知识点:vm调用待$命令介绍

25.vue组件通信案例练习(包含:父子组件通信及平行组件通信)

26.vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解

27.vue2基础组件通信案例练习:待办事项Todo-list案例练习

28.vue2基础组件通信案例练习:把案例Todo-list改写成本地缓存

29.vue2基础组件通信案例练习:把案例Todo-list改成使用自定义事件

30.vue2基础组件通信案例练习:把案例Todo-list改成使用全局事件总线

31.vue2基础组件通信案例练习:把案例Todo-list改成使用消息订阅与发布

32.vue2基础组件通信案例练习:把案例Todo-list新增编辑按钮

33.vue2基础组件通信案例练习:把案例Todo-list改成使用动画与过度

34.学习vue2遇到过的问题及个人总结


http://www.niftyadmin.cn/n/898158.html

相关文章

学习vue2遇到过的问题及个人总结

碰到的问题 1.引入开发板vue.js和引入生产板vue.min.js区别&#xff1f; 区别&#xff1a; 开发版提供便于后端开发者读明白的词条&#xff0c;比如 创建vue实例缺少new关键字时&#xff0c;开发版报错如图1&#xff0c;生产版报错如图2。 图1 图2 2.vue实例中的data属性配置…

《进阶篇第3章:vue进阶-组件》包含组件、自定义事件、插槽、路由等等扩展知识点

文章目录3.1传统方式编写和组件化方式编写区别&#xff1f;3.2概念&#xff1a;模块与组件、模块化与组件化1&#xff09;模块2&#xff09;组件3&#xff09;模块化4&#xff09;组件化3.3非单文件组件3.3.1使用Vue.extend({})方式创建组件(了解&#xff0c;实际不常用)举例&a…

vue2知识点:非单文件组件和单文件组件

文章目录3.3非单文件组件3.3.1使用Vue.extend({})方式创建组件(了解&#xff0c;实际不常用)举例&#xff1a;3.3.2组件嵌套举例&#xff1a;练习组件嵌套3.3.3VueComponent构造函数3.3.4一个重要的内置关系3.4单文件组件本人其他相关文章链接3.3非单文件组件 问题&#xff1a;…

vue2知识点:组件is属性

文章目录3.7 is 属性本人其他相关文章链接3.7 is 属性 问题&#xff1a;为什么在table标签中直接使用自定义组件&#xff0c;无法正常显示&#xff1f; 原因&#xff1a; DOM解析时会解析到<table>标签的外部&#xff0c;table/ol/ul/select 这种html标签有特殊的结构要…

vue2知识点:组件模板定义

文章目录3.8模板3.8.1直接字符串3.8.2 x-template模板3.8.3 template标签3.8.4 省略is本人其他相关文章链接3.8模板 当模板的 html 结构比较复杂时&#xff0c;直接在 template 属性中定义就不现实了&#xff0c;效率也会很低&#xff0c;此时我们可以使用模板&#xff0c;定义…

vue2知识点:组件的props属性、非props属性、props属性校验

文章目录3.10props属性举例&#xff1a;父组件给子组件传递属性msg和greetText&#xff0c;子组件用属性a和b接收&#xff0c;并打印输出3.11props校验举例3.12非props属性举例&#xff1a;定义子组件设置class和style&#xff0c;而标签引用子组件时也设置了class和style&…

vue2知识点:组件自定义事件

文章目录3.13自定义事件3.13.1自定义事件绑定到子组件举例1&#xff1a;模拟只传递一个参数举例2&#xff1a;模拟传递多个参数3.13.2自定义事件挂载到父组件3.13.3自定义事件-解绑3.13.4使用自定义事件的容易出错的点案例1&#xff1a;有3个组件&#xff0c;父组件App.vue&…

vue2知识点:组件插槽分发

文章目录3.14插槽分发3.14.1slot插槽举例3.14.2具名插槽举例3.14.3作用域插槽slot-scope3.14.4slot-scope版本更新本人其他相关文章链接3.14插槽分发 父子组件使用时,有时需要将父元素的模板跟子元素模板进行混合,这时就要用到slot插槽进行内容分发, 简单理解就是在子模板定义…