侧边栏壁纸
博主头像
沙漠渔

把過去的累積,善用到當下

  • 累计撰写 490 篇文章
  • 累计创建 295 个标签
  • 累计收到 960 条评论
标签搜索

目 录CONTENT

文章目录

VUE的生命周期以及各阶段注意事项

沙漠渔
2022-05-11 / 0 评论 / 1 点赞 / 127 阅读 / 2,300 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-12,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

生命周期

VUE生命周期一共分为8个阶段,分别是:
beforeCreate(创建前) ,created(创建后),beforeMount(载入期),mounted(载入后),beforeUpdate(更新前),updated(更新后 ),beforeDestroy(销毁前),destroyed(销毁后)
外加两个keepalive专属
activited keep-alive 专属,组件被激活时调用
deadctivated keep-alive 专属,组件被销毁时调用

示意图

下载.jfif

简单说明

创建期间的生命周期函数:

beforeCreate:实例刚在内存中被创建出来,此时还未初始化完毕data和methods
created:实例已经在内存中创建完毕,此时 data和methods已经创建完毕 但此时还未开始编译模板
beforeMount:此时已经完成模板的编译,但是还未挂载到页面中
mounted:此时已将编译好的模板挂载到了页面指定的容器中显示

运行期间的生命周期函数:

beforeUpdate:状态更新之前执行此函数,此时data中的状态值是最新的 但界面上显示的数据还是旧的,因为此时还未开始重新渲染DOM节点
updated:实例更新完毕之后调用此函数,此时data中的状态值和界面上显示的数据都已完成了更新 界面已被重新渲染好了

销毁期间的生命周期函数:

beforeDestroy:实例销毁前调用,在这 实例仍然完全可用
destroyed:Vue实例销毁后调用,调用后 Vue实例指示的所有东西都会解除绑定 所有的事件监听器会被移除 所有的子实例也会被销毁

注意事项

beforeCreate(创建前

1 .进行初始化事件,this指向创建的实例
2 .不能访问到data
3 .不能访问computed
4 .不能访问watch
5 .不能访问methods
6 .以上的方法和数据
7 .用来初始化非响应变量

created(创建后)

1 .实例创建完成
2 .数据已经和data属性绑定,此时放在data中的属性值发生改变的同时,视图也会改变
3 .可以初始化ajax请求了
4 .可以访问data
5 .可以访问computed
6 .可以访问watch
7 .可以访问methods
8 .可以访问到以上的方法和数据
9 .未挂载到DOM
10 .不能访问到ref属性内容为空数组

beforeMount

1 .判断是否有el选项,有就继续,没有就停止编译,除非调用vm.$moune(el)
2 .是否有template参数选项
1 .有template参数选项,将模板编译为render函数
2 .没有template选项,将外部html作为模板编译
3 .template中的模板优先级要高于outer HTML的优先级

mounted

1 .在mounted里面修改data里面的数据,并不是想要的直接就拿mounted里面的修改过的值渲染界面,而是还会先拿data里面的初始值进行渲染,然后走beforeUpdate这里拿新的数据进行渲染
2 .这是不是说如果想要修改data里面的数据,要在beforeMounted的时候修改呢
3 .其实beforeMounted也是先按照默认值进行渲染,如果beforeMounted里面修改数据比较慢的话,他是不会等着的,还是会直接执行下一个生命周期函数。也就是说所有的生命周期函数之间没有done的操作
4 .如果在beforeMounted里面加一个setInterval()来延迟修改值的话,也会触发beforeMounted函数
5 .往下看其实发现在mounted生命周期之前修改data里面的数据都是在修改虚拟dom,直到mounted之后任何修改才会被渲染到页面上。
6 .所以理论上只要在mounted之前修改数据都行,比如mounted里面进行ajax请求,也是这个原理
7 .这个还需要再看下源码,应该就能记得比较清楚
8 .挂载页面。

beforeUpdate

1 .当data中的数据发生了改变,会触发对应组件的重新渲染
2 .响应式数据更新时调用,发生在虚拟dom打补丁之前
3 .适合在试图更新之前访问现有dom,比如手动移除或者添加事件监听器

updated

1 .虚拟dom重新渲染和打补丁之后调用,组件dom已经更新,可执行依赖dom的操作
2 .避免在这个钩子中操作数据,不然可能陷入死循环

beforeDestory

1 .实例销毁之前调用,这一步实例仍然可以使用,this仍然可以获取实例
2 .常用于销毁定时器,解绑全局事件,销毁插件对象等操作

destoryed

1 .实例销毁之后调用,调用后,Vue实例指示的所有东西都会解绑,所有事件监听器都会被移除,所有子实例也会被销毁、

注意

1 .created阶段的ajax请求和mounted阶段请求的区别:前者页面未出现,如果请求消息太多,页面会长时间处于白屏状态
2 .mounted不会承诺所有的子组件也都一起被挂载。如果希望等到整个视图都被渲染完毕,可以使用this.$nextTick

1
广告 广告

评论区