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获取当前select 元素值的代码
Apr 19 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
Jul 10 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
Jan 23 Javascript
node.js实现复制文本到剪切板的功能
Jan 23 Javascript
简单谈谈gulp-changed插件
Feb 21 Javascript
js模拟微博发布消息
Feb 23 Javascript
js字符串与Unicode编码互相转换
May 17 Javascript
Angular.JS中的this指向详解
May 17 Javascript
用原生JS实现简单的多选框功能
Jun 12 Javascript
限时抢购-倒计时的完整实例(分享)
Sep 17 Javascript
SVG实现时钟效果
Jul 17 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
Dec 24 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
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
js 学习笔记(三)
2009/12/29 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
微信小程序页面滑动屏幕加载数据效果
2020/11/16 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
Python实现的HTTP并发测试完整示例
2020/04/23 Python
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
python实现人人自动回复、抢沙发功能
2018/06/08 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
通过python检测字符串的字母
2020/02/18 Python
python爬虫用mongodb的理由
2020/07/28 Python
建筑工程技术应届生自荐信
2013/09/27 职场文书
国际商务专业学生个人的自我评价
2013/09/28 职场文书
化学相关工作求职信
2013/10/02 职场文书
商场活动策划方案
2014/01/24 职场文书
八一建军节感言
2014/02/28 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书
活动总结新闻稿
2014/08/30 职场文书
英文导游词
2015/02/13 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
python 实现的截屏工具
2021/05/08 Python
Python Pandas知识点之缺失值处理详解
2021/05/11 Python
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android
MySQL分区以及建索引的方法总结
2022/04/13 MySQL