vue中created和mounted的区别浅析


Posted in Javascript onAugust 13, 2019

前言

关于vue.js中的生命周期,如果不是有特别的需求,一般在项目开发过程中更多的使用created和mounted,
所以在本文中主要讲解created与mounted在开发中的主要使用区别。

关于完整的生命周期,不久会在另一篇文章中做整体的理解,包括activated、destroyed等,不过可能会有点晚,大家可以留意一下

版本信息:

  • 系统:win10
  • Vue:2.5.2
  • webpack:3.6.0
  • npm:6.9.0
  • node:10.15.3

生命周期

完整的生命周期图示为了避免占用板块,这里就不贴出来了,大家可以自行前往vue生命周期查看。

浏览器渲染过程

具体的浏览器渲染过程我会过几天另外写一遍文章,大家可以去我的文章看看。

  • 构建DOM树
  • 构建css规则树,根据执行顺序解析js文件。
  • 构建渲染树Render Tree
  • 渲染树布局layout
  • 渲染树绘制

生命周期中的浏览器渲染

这里是官方文档对生命周期api的解释,大家可以看看

以下为测试vue部分生命函数

beforeCreate(){
 console.log('beforecreate:',document.getElementById('first'))//null
 console.log('data:',this.text);//undefined
 this.sayHello();//error:not a function
},
created(){
 console.log('create:',document.getElementById('first'))//null
 console.log('data:',this.text);//this.text
 this.sayHello();//this.sayHello()
},
beforeMount(){
 console.log('beforeMount:',document.getElementById('first'))//null
 console.log('data:',this.text);//this.text
 this.sayHello();//this.sayHello()
},
mounted(){
 console.log('mounted:',document.getElementById('first'))//<p></p>
 console.log('data:',this.text);//this.text
 this.sayHello();//this.sayHello()
}

通过上述测试我们可以知道,

生命周期 是否获取dom节点 是否可以获取data 是否获取methods
beforeCreate
created
beforeMount
mounted

以我的个人理解,vue生命周期实际上和浏览器渲染过程是挂钩的,

在beforecreate阶段,对浏览器来说,整个渲染流程尚未开始或者说准备开始,对vue来说,实例尚未被初始化,data observer和 event/watcher也还未被调用,在此阶段,对data、methods或文档节点的调用现在无法得到正确的数据。

在created阶段,对浏览器来说,渲染整个HTML文档时,dom节点、css规则树与js文件被解析后,但是没有进入被浏览器render过程,上述资源是尚未挂载在页面上,也就是在vue生命周期中对应的created
阶段,实例已经被初始化,但是还没有挂载至$el上,所以我们无法获取到对应的节点,但是此时我们是可以获取到vue中data与methods中的数据的

在beforecreate阶段,实际上与created阶段类似,节点尚未挂载,但是依旧可以获取到data与methods中的数据。

在mounted阶段,对浏览器来说,已经完成了dom与css规则树的render,并完成对render tree进行了布局,而浏览器收到这一指令,调用渲染器的paint()在屏幕上显示,而对于vue来说,在mounted阶段,vue的template成功挂载在$el中,此时一个完整的页面已经能够显示在浏览器中,所以在这个阶段,即可以调用节点了(关于这一点,在笔者测试中,在mounted方法中打断点然后run,依旧能够在浏览器中看到整体的页面)。

写在最后

笔者目前也只是一个职场小白,粗略探讨一下自己的看法,若有疑问,或者文章错误,都可以在评论中指出,我们一起讨论

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
May 18 Javascript
判断多个input type=file是否有已经选择好文件的代码
May 23 Javascript
js实现飞入星星特效代码
Oct 17 Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
Nov 27 Javascript
javascript的函数劫持浅析
Sep 26 Javascript
dul无法加载bootstrap实现unload table/user恢复
Sep 29 Javascript
js编写选项卡效果
May 23 Javascript
Vue的土著指令和自定义指令实例详解
Feb 04 Javascript
vue框架搭建之axios使用教程
Jul 11 Javascript
vue实现搜索功能
May 28 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
Sep 17 Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 #Javascript
微信小程序使用npm包的方法步骤
Aug 13 #Javascript
Vue中的transition封装组件的实现方法
Aug 13 #Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
Aug 12 #Javascript
详解json串反转义(消除反斜杠)
Aug 12 #Javascript
json 带斜杠时如何解析的实现
Aug 12 #Javascript
electron实现静默打印的示例代码
Aug 12 #Javascript
You might like
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
js面向对象的写法
2016/02/19 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
浅谈python多线程和队列管理shell程序
2015/08/04 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
2020/07/06 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
EJB3推出JPA的原因
2013/10/16 面试题
大学生入党自我鉴定
2013/10/31 职场文书
个人作风剖析材料
2014/02/02 职场文书
优秀学生获奖感言
2014/02/15 职场文书
开除通知书范本
2015/04/25 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
Python函数中的不定长参数相关知识总结
2021/06/24 Python
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
JavaScript执行机制详细介绍
2021/12/06 Javascript