vue2生命周期有几个(vue各个生命周期的作用)

vue2生命周期有几个(vue各个生命周期的作用)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> 

讯享网




生命周期(Life Cycle)是指一个组件从创建 ->运行 ->销毁的整个阶段,强调的是一个时间段


由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行

生命周期强调的是时间段,生命周期函数强调的是时间点


生命周期函数的分类


组件创建阶段

new Vue() 创建组建的实例对象

init Events & LifeCycle 初始化事件和生命周期函数

–&gt; beforeCreate() 组件的props/data/methods尚未被创建,都处于不可用状态

init injections & reactivity 初始化props、data、methods

–&gt; created() 组件的props/data/methods已被创建,都处于可用状态,但组件的模板结构未生成
此时为最早可以使用属性方法的阶段,此阶段常用于发送ajax请求获取数据,或用于绑定自定义事件交换数据

Has “el”option? or when vm.\(mount(el) is called 是否有挂载元素el</p> </blockquote> <blockquote> <p>Has “template” option? 基于数据和模板&#xff0c;在内存中编译生成HTML结构</p> <p>有模板属性时渲染模板属性 Compile template into render function *<br /> 没有模板属性时渲染挂载元素el Compile el’s outerHTML as template *</p> </blockquote> <blockquote> <p><strong>–&gt; beforeMount()</strong> 将要把内存中编译好的HTML结构渲染到浏览器&#xff0c;此时浏览器还没有当前组件的DOM</p> </blockquote> <blockquote> <p>Create vm.\)el and replace “el” with it 把内存中编译生成的HTML结构替换掉el属性指定的DOM元素

–&gt; mounted() 已经把内存中的HTML结构渲染到浏览器,此时浏览器已经包含当前组件的DOM结构
此时为最早可以操作组件DOM元素的阶段


组件运行阶段

when data changes 当数据发生改变时

–&gt; beforeUpdate() 将要根据变化之后的最新的数据,重新渲染组件中的模板结构

Virtual DOM re-render and patch 根据最新的数据,重新渲染组件的DOM结构


讯享网

–&gt; updated() 已经根据最新的数据,完成了组件的DOM结构的重新渲染
能够操作最新的DOM元素


组件销毁阶段

when vm.$destory() is called 调用组件的销毁函数

–&gt; beforeDestory() 将要销毁此组件,此时尚未销毁,还处于工作的状态

Teardown watchers,child components and event listeners 销毁当前组件的数据侦听器、子组件、事件监听

–&gt; destoryed() 组件已经被销毁,此组件在浏览器中对应的DOM结构已被完全移除


keep-alive 缓存特殊的两个阶段

–&gt; activated 组件激活时

被 keep-alive 缓存的组件激活时调用。初始化操作放在actived里面,该钩子在服务器端渲染期间不被调用。

–&gt; deactivated组件停用时

被 keep-alive 缓存的组件停用时调用。在里面可以进行一些善后操作,该钩子在服务器端渲染期间不被调用。

添加keep-alive标签后会增加activated和deactivated这两个生命周期函数

初始化操作放在actived里面,一旦切换组件

因为组件没有被销毁,所以它不会执行销毁阶段的钩子函数,所以移除操作需要放在deactived里面

在里面进行一些善后操作,这个时候created钩子函数只会执行一次,销毁的钩子函数一直没有执行。






错误处理

当捕获一个来自子孙组件的错误时被调用。

此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。

此钩子可以返回 false 以阻止该错误继续向上传播


错误传播规则

默认情况下,如果全局的 config.errorHandler定义,所有的错误仍会发送它

因此这些错误仍然会向单一的分析服务的地方进行汇报

如果一个组件的继承或父级从属链路中存在多个 errorCaptured 钩子,则它们将会被相同的错误逐个唤起。

如果此 errorCaptured 钩子自身抛出了一个错误,则这个新错误和原本被捕获的错误都会发送给全局的 config.errorHandler

不能捕获异步promise内部抛出的错误和自身的错误

一个 errorCaptured 钩子能够返回 false 以阻止错误继续向上传播

本质上是说“这个错误已经被搞定了且应该被忽略”

它会阻止其它任何会被这个错误唤起的 errorCaptured 钩子和全局的 config.errorHandler


错误捕获

组件遇到错误时通过Vue.config.errorHander进行捕获

讯享网

–&gt; errorCaptured 类似错误边界处理

 








小讯
上一篇 2025-04-14 14:01
下一篇 2025-05-27 14:28

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/193501.html