| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> Vue都使用那么久了,还不了解它的生命周期吗 -> 正文阅读 |
|
[JavaScript知识库]Vue都使用那么久了,还不了解它的生命周期吗 |
前言 但是我们得卷啊,不卷怎么脱颖而出😥,我还记得在今年的蓝桥杯群里,有一同届的还不知道哪个大学的哥们,已经在读Vue/React/Node的源码了…作为小菜鸡的我看着大佬侃侃而谈,在群角落里瑟瑟发抖。 最近有在牛客上复习Vue的知识,整理出这篇文章,一是方便自己未来复习,二是希望能够帮助一些跟我一样的朋友们复习一边知识点,学习在什么时候都不晚。 这篇文章会讲到: Vue的生命周期到底是什么 Vue的生命周期到底是什么? Vue生命周期的执行顺序 我们先来看看它的执行顺序吧: 有两种方法,一种就是Vue的官方文档上面有一个图是专门解释生命周期的,但鉴于可能许多小伙伴们都是跟我一样,看英文文档都要伴随着翻译的水平,所以特意在网上找了个翻译过后的汉化版,放在这里给大家做参考: 这个图详细的解释了一个Vue实例从创建到销毁的全过程。 第二种方法,就是我们在Vue项目中打印一下,在控制台中我们就能清晰的看出,谁执行的早,谁执行的晚,甚至能看出他们有什么区别:
挂载阶段 我们可以看到beforeCreate是最先的,并且在此时的状态下,我们打印的信息什么都拿不到。 之后进入了created状态,在这个状态中我们的el,也就是Dom元素依旧是拿不到的,但是我们已经可以拿到data了,这意味着 created已经将数据加载进来了 ,已经为这个Vue实例开辟了内存空间。 beforeMount,挂载前状态,在我的理解挂载就是将虚拟Dom转变成真实Dom的过程,所以在这之前,我们的el当然还是拿不到的。 mounted,挂载结束,意味着虚拟Dom已经挂载在了真实的元素上,所以从此开始我们就可以拿到el了。我们可以用console.dir去打印一些我们需要的元素的属性。 至此,我们的挂载阶段就结束了。 更新阶段 每当我们去改变页面元素的时候,就会进入更新阶段,也就是beforeUpdate,updated这两个状态。 销毁阶段 beforeDestroy,销毁前状态,在销毁之前,所以我们的元素、data都是如同挂载之后的阶段一样,都是可以打印出来的。 destroyed,其实最让我震惊的是这个,销毁完成的状态,我以为销毁了,那应该什么都打印不出来了,其实不然,他还是什么都可以打印出来的。 beforeDestroy和destroyed,都是我们离开这个组件才会被调用的生命周期。 生命周期的每个阶段适合做什么 created: 在Vue实例创建完毕状态,我们可以去访问data、computed、watch、methods上的方法和数据,但现在还没有将虚拟Dom挂载到真实Dom上,所以我们在此时访问不到我们的Dom元素(el属性,ref属性此时都为空)。 我们在此时可以进行一些简单的Ajax,并可以对页面进行初始化之类的操作 beforeMount: 它是在挂载之前被调用的,会在此时去找到虚拟Dom,并将其编译成Render mounted: 虚拟Dom已经被挂载到真实Dom上,此时我们可以获取Dom节点,$ref在此时也是可以访问的。 我们在此时可以去获取节点信息,做Ajax请求,对节点做一些操作 beforeupdate: 响应式数据更新的时候会被调用,beforeupdate的阶段虚拟Dom还没更新,所以在此时依旧可以访问现有的Dom。 我们可以在此时访问现有的Dom,手动移除一些添加的监听事件 updated: 此时补丁已经打完了,Dom已经更新完毕,可以执行一些依赖新Dom的操作。 但还是不建议在此时进行数据操作,避免进入死循环(这个坑我曾经踩过) beforeDestroy: 在Vue实例销毁之前被调用,在此时我们的实例还未被销毁。 在此时可以做一些操作,比如销毁定时器,解绑全局事件,销毁插件对象等 父子组件的生命周期 不知道大家在刚刚的图中是否注意到了这两行: 我们页面中的小li就是一个被嵌入在这个大页面内部的一个子组件,我们也打印了它的生命周期:
由此可得,在父组件挂载前阶段,子组件已经挂载完成了。 不光是挂载阶段,其他两个阶段我们也可以打印出来,但是在这里我就不细说了,直接上结论: 挂载阶段:父组件 beforeMount -> 子组件 created -> 子组件 mounted -> 父组件 mounted 一般来说,会有两种回答:created和mounted。 上文已经讲了,这两个回答,前者是数据已经准备好了,后者是连dom也已经加载完成了,那么到底哪个才是正确答案呢? 其实,两个都是可以的,但是mounted会更好。 可能有人会说:created的时间会更早,早些调用不是会省很多时间吗?这样性能会不会更高一点 别急,我们一点一点来看 首先,它确实是早了,但是早不了几微秒,所以这其实没有提高性能 还有,有的时候我们接到返回的数据的时候可能要在回调函数中去进行一些Dom的操作,可是created阶段我们还没有将真实Dom加载出来,所以相对而言我们还是在mounted去调用要好一些 最后 如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star: https://gitee.com/ZhongBangKeJi/CRMEB不胜感激 ! |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:46:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |