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 相关文章推荐
JS随机洗牌算法之数组随机排序
Mar 23 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
May 18 Javascript
微信小程序 框架详解及实例应用
Sep 26 Javascript
js获取时间函数及扩展函数的方法
Oct 30 Javascript
浅谈React 属性和状态的一些总结
Nov 21 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
Feb 05 Javascript
轻松理解JavaScript之AJAX
Mar 15 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
Dec 19 Javascript
微信小程序button组件使用详解
Jan 31 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
Apr 02 Javascript
微信小程序实现拖拽功能
Sep 26 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
微信小程序实现点击空白隐藏的方法示例
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
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
php全排列递归算法代码
2012/10/09 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
jquery maxlength使用说明
2011/09/09 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python获取图片颜色信息的方法
2015/03/18 Python
python使用pil生成缩略图的方法
2015/03/26 Python
查看Django和flask版本的方法
2018/05/14 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
实习生自我鉴定范文
2013/12/05 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
二十年同学聚会感言
2015/07/30 职场文书
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python
python turtle绘制多边形和跳跃和改变速度特效
2022/03/16 Python
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android