当前位置: 首页 > Web前端 > vue.js

vue生命周期回顾

时间:2023-04-01 12:38:55 vue.js

vue生命周期:Vue官网生命周期图片生命周期就是组件实例出来到销毁的一系列过程。分为挂载阶段、更新阶段、销毁阶段。1.挂载阶段——主要是组件的实例化,模板解析然后render生成vnode节点(此时已经实现了responsive),最后挂载到页面el上,第一次渲染完成(1)newVue():初始化一个vue实例;(2)beforeCreate:开启生命周期钩子函数,初始化事件;(3)created:这里可以进行数据请求,但是不渲染这个阶段的dom;同时在这个阶段观察数据,加上data属性,初始化data数据(响应式);(4)beforeMount:①首先判断是否有el选项,有则直接执行;否则,vue实例将处于“未挂载”状态,此时通过vm.$mount手动执行挂载;②有el继续向下执行:如果vue实例中有模板,则将其作为模板编译render函数;如果没有template模板,则将外部html编译为模板;如果同时存在模板和外部HTML,则模板的优先级将高于外部HTML;如果vue实例中有render函数,它以createElement为参数,然后进行渲染操作,我们可以直接嵌入JSX;**renderfunction>templatetemplate>outerHtml**newVue({el:"#app"})(4)mounted:给vue实例对象添加$el成员,并且需要替换挂载在dom上的元素,beforeMount中打印的el还是undefined;挂载前还是被变量占用,eg:

{{msg}}
,挂载后可以看到msg被赋值了;二、更新阶段--主要是数据变化触发响应式setter方法,re-render生成vnode节点,通过diff算法比较新旧vnode节点,进行patching,更新渲染完成(5)beforeUpdate:dom不渲染,可修改数据不会进行二次渲染;(6)updated:dom节点已经渲染生成,通过diff算法比较新旧dom,更新变化的地方,即打补丁[patch(vnode,newVNode)]3。卸载(销毁)阶段——主要是卸载所有watcher、子组件和事件(清理工作阶段)(7)beforeDestroy:这个阶段是销毁工作前;(8)destroyed:通过this.$destroy()销毁,会主动清理自身内容(例如:响应式数据、@click绑定事件、清除开启定时器、去除手动创建dom对象等)(9)activatedanddeactivated:**注意:只有组件被包裹时才会有activated和deactivated**包装了两个组件:组件A和组件B。当第一次切换到组件A时,会执行组件A创建和激活的生命周期函数。此时通过~~~~click事件改变组件A的文字颜色,然后切换到组件B,就会触发组件A的去激活生命周期功能;切换回组件A后,会触发组件A的activated生命周期函数,但是不会触发它创建的生命周期函数,A组件的文字颜色也是我们之前设置好的。(10)errorCaptured当捕获来自后代组件的错误时调用