问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Vue笔记(Vue生命周期 11个钩子)

发布网友 发布时间:2022-09-24 09:39

我来回答

1个回答

热心网友 时间:2023-09-16 14:23

Vue实例有一个完整的生命周期,也就是说从开始创建、初始化数据、编译模板、挂在DOM、渲染-更新-渲染、卸载等一系列过程,我们称为Vue 实例的生命周期(钩子函数)

附上网上找的一张图解释
当我们 new vue 的时候,这些函数就会自动执行

创建:
beforeCreate -- 数据初始化前
created -- 数据初始化之后
beforeMount -- 数据准备渲染
Mounted -- 数据渲染完成
运行:
beforeUpdata -- 数据更新前
updated -- 数据更新
销毁:
beforeDestroy -- 结束之前执行
destroyed -- 执行结束
缓存:
activated -- 组件激活时执行
deactivated -- 组件停用时执行
错误处理
errorCaptured -- 错误处理机制

构建vue实例

在实例初始化之后,数据观测和event|watcher事件配置之前使用,
这个时期,this变量还不能使用,在data下面的数据和methods下面的方法,watcher中的事件都获取不到。

可以在这里加一个loading事件,在实例加载的时候触

实例已经创建完成之后被调用,在这一步,实例已经完成以下的配置,数据观测,属性和方法的运算,event|watcher事件回调;但是,挂载阶段还没有开始,$el属性还不可见,这个时候可以操作vue实例中的数据和各种方法.但是还不能对DOM节点进行操作

初始化完成时的事件写在这里,比如在这里结束loading事件,异步请求也可以在这里调用

在挂载开始之前被调用,相关的render函数首次被调用

这个时候可以获取到DOM节点,但还不能进行操作

el 被新创建的 vm.$el 替换并挂载到实例上去之后调用这个钩子,如果root实例挂载了一个文档内元素,当Mounted被调用时, vm. $el 也在文档中。

挂载完毕,DOM节点被渲染到文档中,DOM操作可以正常进行

数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件*。

这里获取到data的数据是已经更新之后的数据,但还没渲染到文档流中,所以如果在这里获取DOM节点,得到的是未更新的数据。

由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher取而代之。

数据更新已经完成

在这里绑定了一个按钮,改变数据
更新前 beforeUpdata:

点击更新后 updated :

在实例销毁之前调用,实例仍然完全可用,这一步还可以用this来获取实例,一般在这一步做一些重置的操作,比如清除掉组件中的定时器 和 监听的dom事件

在实例销毁之后调用,调用后,所以的事件*会被移出,所有的子实例也会被销毁,该钩子在服务器端渲染期间不被调用

这两个钩子需要配合配合 <keep-alive><keep-alive/> 来使用
keep-alive 的作用会缓存不活动的组件实例,而不是销毁它们。当组件在 <keep-alive> 内被切换, activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。

在这里我搭建了一个脚手架,新建2个子组件,1个父组件

输出

这里看到当A组件被点击激活时就触发 activated 钩子,点击B组件开启A组件关闭时 deactivated 钩子就触发执行。

这里也能看出在 keep-alive 里A组件的数据也被缓存起来,第二次触发的时候组件状态没有被重新改变

当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播

在全局组件main.js中使用

然后在子组件中随意写入一个错误的信息

输出

当这个钩子检测到组件中发生错误时就被调用。通过 err , vm , info 这3个参数输出
#err错误对象
#vm Vue实例
# info 是 Vue 特定的错误信息,比如错误所在的生命周期钩子

beforecreate:实例刚刚创建出来,data等属性方法都不能获取,loading事件可以放在这里。
created:实例初始化完成,data等属性方法也初始化完成,但还没有开始编译,可以在这里结束loading,可以发送请求,拿数据。!注意一下,因为在这里还没有渲染页面,如果获取的数据过多,会造成有一段空白页面的延迟。
beforemount :属性方法等已经编译完成,但还没挂载。
mounted:这里所有的属性方法已经完成挂载。
beforeUpdate:这个获取的数据是最新的值,但dom还是旧值
updated:dom更新完成。
beforedestroy:消亡前,用来清除定时器
destroy:已消亡,也能用来清除定时器
destroyed:实例完全销毁
activated:可以用来初始化数据
deactivated:在缓存里能用来代替 beforedestroy 和 destroy
errorCaptured :能快速找到报错的组件位置,还能解决满屏红等视觉冲击

问题:
如果当在子组件里写了一个定时器,子组件被销毁后,定时器还是会继续执行,所以要使用 beforedestroy 和 destroyed ,组件销毁后,清除定时器。

<keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们,所以在 <keep-alive> 中的所有组件不会触发 beforedestroy 和 destroyed 这两个钩子函数

关于 created 和 activated 的区别
created 是页面初始化时才触发的函数,vue的优势在于不需要刷新或重启页面,所以 created 只会触发一次。而 activated 是只要页面组件被激活就会执行

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
酸醋萝卜怎么做又脆又好吃 账簿启用及交接表填写的步骤 账簿启用及交接表怎样填写 说的是精神分裂症,吃了二年多的药,分别是利培酮片,苯海索片,补脑_百度... 精神分裂症急性期适当的治疗方法 快递三斤荔枝的话要多少钱? 求高手指点一个plc编程问题,计算时间差,还有时间比较后,输出执行... 你好高手 我现在买了个松下fp0的PLC我想写一个步进程序,请问能否... 【plc执行程序步骤】 plc执行程序时 若有一步不能满足条件而执行不了... 电脑屏幕的壁纸怎么更换? vue点击其它地方隐藏组件 爸爸对女儿的成长寄语的诗句 关于父女感情的诗句古诗 想问爸爸和女儿的暖心句子 想问cad制图比例怎么设置 哺乳期月经推迟一个月正常吗 刘悦首次在中国好声音里唱的那首歌叫什么名字 我是歌手0320歌手名单 中国好声音找一首歌曲。重谢 陈奕迅唱的Mr Lonely。 《寂寞先生》谁唱的﹖ 在家最有效的翘臀方法 坦荡做人无愧于心的句子 考CCNA外语不好 有过的吗 好过吗? 开头是锲,而,不,舍,坚,持,不,懈,的成语 而开头的成语接龙 而开头的四字词语 而字开头的成语 而字开头的成语有哪些,谢谢 而且的而开头的成语 腾讯:“有所为和有所不为”,早年不做手机,现在不做汽车,对此你咋看? 计算机辅助设计与图形学学报是ei吗 计算机辅助设计与图形学学报版面费是多少钱? 想问腾讯视频电视版本vip通用吗 互联网时代&quot;汽车生态圈&quot; 谁才是最后赢家 我的手机型号是vivo,可是最近不知道怎么回事,就是下载不了东西,求解答! 痘痘消了之后会留下痘坑,难看死了,怎么才能补上。我脸上很多,怎么防止它变成痘坑啊 痘印怎么预防和去除? 如果防止痘痘?防止痘印变黑? 脸上都是痘坑痘印、而且总能挤出白的东西、怎么治?怎么预防阿? 急求:戴叔伦《从军行》相关资料 小小美食家小学作文400字 吃货的白白 作文 400字 作文绝味小吃400字 我的相机是SONY的,怎么能让照片显示日期呢? 朱熹的《朱子治家格言》全文 张爱玲经典语录精选80句 前置仓、仓店一体、云仓、无人仓四种仓储管理模式的异同和每种模式适用的条件 云仓代发需要办营业执照吗 朱子治家格言全文及翻译