文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Vue八大生命周期钩子函数源码分析

2023-07-05 17:41

关注

本篇内容主要讲解“Vue八大生命周期钩子函数源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue八大生命周期钩子函数源码分析”吧!

一.速识概念:

我们把一个对象从生成(new)到被销毁(destory)的过程,称为生命周期。而生命周期函数,就是在某个时刻会自动执行的函数。
按照官方的原话,就是每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。
简单来说就是每个Vue实例在被创建时都要经过一系列的初始化过程:创建实例,装载模板,渲染模板等。Vue为生命周期中的每个状态都设置了钩子函数(监听函数) 。每当Vue实例处于不同的生命周期时,对应的函数就会被触发调用。

二.八大生命周期钩子函数:

函数调用时间
beforeCreatevue实例初始化之前调用
createdvue实例初始化之后调用
beforeMount挂载到DOM树之前调用
mounted挂载到DOM树之后调用
beforeUpdate数据更新之前调用
updated数据更新之后调用
beforeDestroyvue实例销毁之前调用
destroyedvue实例销毁之后调用

下面是官方文档里的生命周期图,英语好的同学可以看看:

Vue八大生命周期钩子函数源码分析

三.结合代码了解:

先看案例基本代码如下,后面通过如下代码步骤演示一个对象从生成到被销毁的过程各阶段执行的生命周期函数。注意show函数的作用。

<!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://unpkg.com/vue/dist/vue.js"></script></head><body>    <div id="app">        {{information}}    </div>    <script type="text/javascript">       //创建vue实例       var vm = new Vue({           el: '#app',           data: {               information: '北极光之夜。'            }       })       // 各个生命周期函数通过调用下面这个函数了解其所处的生命阶段       function show(inf,obj){          console.log(inf);          console.log("------------------------------------------");          console.log('获取vue实例data里的数据:');          console.log(obj.information);          console.log("------------------------------------------");          console.log('挂载的对象,就是DOM:');          console.log(obj.$el);          console.log("------------------------------------------");          console.log('页面上已经挂载的DOM:');          console.log(document.getElementById('app').innerHTML);       }    </script>

1. beforeCreate:

这个阶段vue实例刚刚在内存中创建,此时data和methods这些都没初始化好。
在案例中添加beforeCreate钩子函数:

 var vm = new Vue({           el: '#app',           data: {               information: '北极光之夜。'            },           beforeCreate: function(){             // 传入该阶段简介与this,this就是该阶段的vue实例                  show('vue实例初始化之前',this);           }       })

看运行结果:

Vue八大生命周期钩子函数源码分析

可以看到,此时vue实例刚刚在内存中创建,其它什么都undefined。

2.created:

这个阶段vue实例在内存中已经创建好了,data和methods也能够获取到了,但是模板还没编译。
在案例中添加created钩子函数:

 var vm = new Vue({           el: '#app',           data: {               information: '北极光之夜。'            },           created: function(){                  show('vue实例初始化之后',this);           }       })

看结果:

Vue八大生命周期钩子函数源码分析

看到没,已经知道data里的数据了。其它的话都没。

3.beforeMount:

这个阶段完成了模板的编译,但是还没挂载到页面上。
在案例中添加钩子函数:

 var vm = new Vue({           el: '#app',           data: {               information: '北极光之夜。'            },           beforeMount: function(){             show('挂载之前',this);           }       })

看结果:

Vue八大生命周期钩子函数源码分析

看到没,要挂载的对象都编译好了,但是页面的DOM树还没挂上去,这个阶段页面还没能显示出来。

4.mounted:

这个阶段,模板编译好了,也挂载到页面中了,页面也可以显示了。
在案例中添加钩子函数:

  var vm = new Vue({           el: '#app',           data: {               information: '北极光之夜。'            },           mounted: function(){            show('挂载之后',this);           }       })

看结果:

Vue八大生命周期钩子函数源码分析

5.beforeUpdate:

转态更新之前执行此函数,此时data中数据的状态值已经更新为最新的,但是页面上显示的数据还是最原始的,还没有重新开始渲染DOM树。

先改变data里数据:

vm.information = '南极光之夜';

在案例中添加钩子函数:

 var vm = new Vue({           el: '#app',           data: {               information: '北极光之夜。'            },          beforeUpdate: function(){            show('更新之前',this);           }       })

看结果:

Vue八大生命周期钩子函数源码分析

看到没,vue实例里的数据已经变成了南极光之夜。但是此阶段页面DOM节点上显示的还是初始的数据北极光之夜。

6.updated:

这个阶段是转态更新完成后执行此函数,此时data中数据的状态值是最新的,而且页面上显示的数据也是最新的,DOM节点已经被重新渲染了。

在案例中添加钩子函数:

  var vm = new Vue({           el: '#app',           data: {               information: '北极光之夜。'            },          updated: function(){            show('更新之后',this);           }       })

看运行结果:

Vue八大生命周期钩子函数源码分析

更新了,全都更新了~

7.beforeDestroy:

beforeDestroy阶段处于vue实例被销毁之前,当然,这个阶段vue实例还能用。

销毁Vue实例:

vm.$destroy();

在案例中添加钩子函数:

 var vm = new Vue({           el: '#app',           data: {               information: '北极光之夜。'            },          beforeDestroy: function() {            show('销毁之前',this);          }       })

看效果:

Vue八大生命周期钩子函数源码分析

8.destroyed:

这个阶段在vue实例销毁后调用,此时所有实例指示的所有东西都会解除绑定,事件监听器也都移除,子实例也被销毁。

在案例中添加钩子函数:

var vm = new Vue({           el: '#app',           data: {               information: '北极光之夜。'            },          destroyed: function() {            show('销毁之后',this);          }       })

看结果:

Vue八大生命周期钩子函数源码分析

到此,相信大家对“Vue八大生命周期钩子函数源码分析”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯