当面试官问:“谈谈你对vue的生命周期的理解”,听到这句话你是不是心里暗自窃喜:这也太容易了吧,不就是beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed 这几个钩子函数么,创建=>挂载=>更新=>销毁,So easy !!!

非也非也。如果你只是简单罗列出这几个钩子函数的名称,不具体深入阐述的话,你这样的回答很难令面试官满意。如何才能以点带面深入阐述自己对vue的生命周期理解,从而让面试官对你留下好印象呢?

别急,闰土大叔来告诉你,下次再碰到这个问题,你可以直接甩给面试官下面这张Image就OK了~

当然,甩张Image给面试官这句话肯定是开玩笑的(适度幽默,缓解紧张气氛)。不过这张流程图还是有用的,因为它是我从Vue官网上拷贝下来的,只要你能理解了这张图,也就对Vue的生命周期有了一个大致的了解。那么接下来,闰土大叔将手摸手教你如何深入浅出地说出令面试官满意的、有亮点的回答。

在谈到Vue的生命周期的时候,我们首先需要创建一个实例,也就是在 new Vue ( ) 的对象过程当中,首先执行了init(init是vue组件里面默认去执行的),在init的过程当中首先调用了beforeCreate,然后在injections(注射)和reactivity(反应性)的时候,它会再去调用created。所以在init的时候,事件已经调用了,我们在beforeCreate的时候千万不要去修改data里面赋值的数据,最早也要放在created里面去做(添加一些行为)。

当created完成之后,它会去判断instance(实例)里面是否含有“el”option(选项),如果没有的话,它会调用vm.$mount(el)这个方法,然后执行下一步;如果有的话,直接执行下一步。紧接着会判断是否含有“template”这个选项,如果有的话,它会把template解析成一个render function ,这是一个template编译的过程,结果是解析成了render函数:

render (h) {return h('div', {}, this.text)
}
复制代码

解释一下,render函数里面的传参h就是Vue里面的createElement方法,return返回一个createElement方法,其中要传3个参数,第一个参数就是创建的div标签;第二个参数传了一个对象,对象里面可以是我们组件上面的props,或者是事件之类的东西;第三个参数就是div标签里面的内容,这里我们指向了data里面的text。

使用render函数的结果和我们之前使用template解析出来的结果是一样的。render函数是发生在beforeMount和mounted之间的,这也从侧面说明了,在beforeMount的时候,$el还只是我们在HTML里面写的节点,然后到mounted的时候,它就把渲染出来的内容挂载到了DOM节点上。这中间的过程其实是执行了render function的内容。

在使用.vue文件开发的过程当中,我们在里面写了template模板,在经过了vue-loader的处理之后,就变成了render function,最终放到了vue-loader解析过的文件里面。这样做有什么好处呢?原因是由于在解析template变成render function的过程,是一个非常耗时的过程,vue-loader帮我们处理了这些内容之后,当我们在页面上执行vue代码的时候,效率会变得更高。

beforeMount在有了render function的时候才会执行,当执行完render function之后,就会调用mounted这个钩子,在mounted挂载完毕之后,这个实例就算是走完流程了。

后续的钩子函数执行的过程都是需要外部的触发才会执行。比如说有数据的变化,会调用beforeUpdate,然后经过Virtual DOM,最后updated更新完毕。当组件被销毁的时候,它会调用beforeDestory,以及destoryed。

这就是vue实例从新建到销毁的一个完整流程,以及在这个过程中它会触发哪些生命周期的钩子函数。那说到这儿,可能很多童鞋会问,钩子函数是什么意思?

钩子函数,其实和回调是一个概念,当系统执行到某处时,检查是否有hook,有则回调。说的更直白一点,每个组件都有属性,方法和事件。所有的生命周期都归于事件,在某个时刻自动执行。

其实,当你跟面试官阐述到这儿的时候,面试官基本上已经满意你的回答了,隐约看到了你的技术功底。当然,如果你还想更进一步,让面试官对你刮目相看,达到加分的效果,你还可以这样说:

在这个过程当中,Vue为我们提供了renderError方法,这个方法只有在开发的时候它才会被调用,在正式打包上线的过程当中,它是不会被调用的。它主要是帮助我们调试render里面的一些错误。

renderError (h, err) {return h('div', {}, err.stack)
}
复制代码

有且只有当render方法里面报错了,才会执行renderError方法。

所以我们主动让render函数报个错:

render (h) {throw new TypeError('render error')
}
复制代码

如图所示,渲染出来的就是Error信息了。还有一点,renderError只有在本组件的render方法报错的情况下它才会被调用。

写在最后

这就是关于vue的生命周期的一个详细的阐述,大家只需要记住在vue的生命周期里有哪些钩子函数,它们分别是在什么情况下会被调用,以及其中的一些原理即可。

以后如果有人问你“如何解释vue的生命周期才能令面试官满意”这个问题,你可以直接把这篇文章甩给他就OK了。

最后祝所有面试的童鞋顺利拿到OFFER!


欢迎关注我的后续文章,文章预告:

  • eslint的错误修复小技巧
  • 开发时服务端渲染的配置和原理
  • 使用koa实现node server
  • ......
  • 如何使用pm2以及服务器端的部署

以上内容均会第一时间发布在我的公众号:闰土大叔 ,欢迎关注。

如何解释vue的生命周期才能令面试官满意?相关推荐

  1. 转 怎么回答“分布式架构”才能让面试官满意?

    转载于 https://blog.csdn.net/weixin_43277643/article/details/82869090 简介 作为一名架构师,我们要专业,要能看懂代码,及时光着臂膀去机房 ...

  2. 软件测试自我介绍 说什么才能让面试官一下子记住你!

    国庆假期刚过,又逢金九银十,复工大潮开启,想必很多小伙伴都迎来了期待已久的面试! 在面试中,自我介绍是面试官对你提出的第一个问题,这直接关系到面试官对你的第一印象,如果回答得不好,直接被毙掉也是可能的 ...

  3. Vue的生命周期详解

    Vue的生命周期 Vue的生命周期就是vue实例从创建到销毁的全过程,也就是 new Vue() 开始就是vue生命周期的开始.Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板. ...

  4. Vue的生命周期的详解

    Vue的生命周期 Vue的生命周期是每个使用Vue框架的前端人员都需要掌握的知识,以此作为记录. Vue的生命周期就是vue实例从创建到销毁的全过程,也就是new Vue() 开始就是vue生命周期的 ...

  5. js字符串替换_浅析Vue的生命周期以及JS异步

    前言 Vue的生命周期和JS异步都是有很多文章的知识点,我之前也是一知半解,基本够用. 但是直到我在开发的时候真的遇到了问题,才发现如果不把这些知识点融汇到一起,很难解决实际问题. 我甚至觉得这是我离 ...

  6. java 实例的生命周期_[Java教程]Vue实例生命周期

    [Java教程]Vue实例生命周期 0 2017-08-15 19:00:09 前面的话 Vue实例在创建时有一系列的初始化步骤,例如建立数据观察,编译模板,创建数据绑定等.在此过程中,我们可以通过一 ...

  7. vue 多页面应用例子_【微服务】137:Vue之生命周期钩子

    今天是刘小爱自学Java的第137天. 感谢你的观看,谢谢你. 学习计划安排如下: Vue的深入学习,emm准确地说还不能算是深入学习,我有点高估自己的学习进度了. 本来打算两天时间做一个基础入门的, ...

  8. Vue的生命周期是什么

    我们知道vue是一个构建数据驱动的web界面的渐进式框架. 那vue的生命周期是什么呢? vue生命周期是指vue实例对象从创建之初到销毁的过程,vue所有功能的实现都是围绕其生命周期进行的,在生命周 ...

  9. 11、Vue的生命周期

    首先,我们了解一下"生命周期"这个词.通俗的来说,生命周期就是一个事务从出生到消失的过程.例如,一个人从出生到去世.在vue中,vue的生命周期是指,从创建vue对象到销毁vue对 ...

最新文章

  1. VR Cinema 来了!未来的影院也许是酱紫滴
  2. C++学习笔记35:函数模板
  3. ajax无刷新留言板远吗,php+ajax制作无刷新留言板,phpajax刷新留言板_PHP教程
  4. C++中的 auto类型详解
  5. C++学习之普通函数指针与成员函数指针
  6. js日期控件_11个开源的Github开源日期选择器组件,供你选择
  7. 一直跳出来 visual_六天时间排出来肾结石,这种经历再也不要了
  8. 手写一个机器学习的入门算法-感知器算法
  9. 2018ICPC赛后总结
  10. 【Visual c++ Build Tools】下载
  11. python为什么是蛇的天敌_蛇的天敌是什么?蛇獴对所有蛇毒免疫(成蛇类死对头)
  12. 一天一大 lee(计数二进制子串)难度:简单-Day20200810
  13. 门禁上的push是什么意思_门禁门磁线接在什么设备上的
  14. 乐乐课堂_leleketang.com
  15. vuejs中使用vuex的两种方案之一
  16. 工具_在线生成安卓证书
  17. 基于云的胜利冲锋队 团队团队展示
  18. ubuntu编译工程出现: fatal error: error writing to /tmp/cc1ezU8m.s: No space left on device
  19. JS中几种绑定事件的方式
  20. html引入腾讯地图导航

热门文章

  1. TC358779XBG,HDMI转MIPI DSI,支持全高清,东芝转接芯片
  2. ABP实战--集成Ladp/AD认证
  3. ubuntu下python安装wx包出错解决办法
  4. php获取电脑硬件配置,如何查看电脑硬件配置
  5. php检查数据库记录,php-检查数据库中是否有新条目
  6. JavaScript将扁平化数据转为树形结构
  7. 以后有什么需要的可以到淘宝店铺也可以到微店!
  8. cve查询_CVE年满21岁:如何实现这一里程碑
  9. 嵌入式蓝桥杯G431RBT6 串口配置及使用方法cube MX
  10. turtle之绘制美国队长的盾牌