生命周期是指什么样的生命周期(Life Cycle )这一概念广泛使用,在政治、经济、环境、技术、社会等多个领域尤为常见。 从Vue中创建实例到销毁实例的整个“从摇篮到坟墓”(Cradle-to-Grave )过程是一个生命周期,这一点很容易理解。 这意味着,从创建、初始化数据、编译模板、装载DOM渲染、更新渲染、卸载等一系列过程中,我们可以将组件比作工厂中的流水线。 每个工人(生命周期)都站在各自的岗位上,当任务移动到工人身边时,工人开始工作。
生命周期有8个阶段:创建前后、加载前后、更新前后、销毁前销毁后,以及特殊场景的生命周期。 今天主要使用8个钩子函数
整个生命周期的过程
接下来,从以下三个阶段解读生命周期。
创建阶段执行阶段销毁阶段1 .创建阶段:创建并初始化Vue的实例对象。 此时,对象只有默认的周期函数和默认事件,尚未创建其他对象。
实例的初始化阶段主要有两个函数。
beforeCreate(created ) (beforecreate ) )。
现在,我们打印在data中定义的msg,然后尝试执行show方法。 打开页面并显示控制台。
我在这里弄错了。 this.show is not a function,即不可用。 在beforeCreate生命周期函数运行时,没有初始化data和methods数据。
运行created (接着是遇到的第二个挂接函数created )。
同样,我要去看页面和控制台。
打印结果显示,在created中,data和methods都已初始化。
调用methods的方法或处理data中的数据时,只能在created中进行操作。
开始编译模板。 然后,进入生命周期函数的编译开始模板。
在这里,Vue开始编译模板,
执行vue代码中的那些指令,生成最终编译到内存中的最终模板字符串,然后将该模板字符串呈现到内存中的DOM中。 此时,您只是在内存中渲染模板,而不是将模板挂载到真正的页面上。
装载模板:
开始编译模板后,它进入装载模板,装载阶段也分为两个挂接函数: beforeMount和mounted。
beforeMount ) )这是第三个生命周期函数,指示模板已编译到内存中
但是,没有在页面上渲染模板,让我们结合代码来看看
此时,我们试图将h3内容呈现到页面上,但可以在页面和控制台上看到
此时,页面上显示“确定”字符,但在控制台上仍为{{ msg }}
也就是说,运行beforeMount时,页面中的元素尚未被实际替换,只是以前编写的模板字符串。
mounted ) )这是第四个生命周期函数,指示内存中的模板实际装载到页面上,以便用户可以看到渲染的页面。
现在,页面上将显示“确定”字符,控制台也将渲染为“确定”字符串
注: mounted是实例创建期间的最后一个生命周期函数。 运行mounted时,表示实例已完全创建。 此时,如果没有其他操作,这个实例就会静静地躺在我们的内存里,一动不动。
我们创建阶段的生命周期函数已经完成。 也就是说,是图的圆形部分。
2 .执行阶段下一步的是执行阶段,也就是下图的部分。
执行阶段主要是两个挂接函数。
beforeupdate(updated ) )首先,让我们看看执行阶段的这两个事件
When data changes是指在数据发生变更时
beforeUpdate ) )该挂接函数根据data数据的变化选择性地从0触发多次
为了更好地查看beforeUpdate ()数据的更改,请侦听msg数据,设置按钮,单击按钮更改数据,并将预设的“确定”更改为“否”。
在这个时候,它表明我们的界面还没有更新
这个时候我们需要考虑一个问题。 数据更新了吗?
数据一定更新了。 接口未更新,但数据data已更新。
看看印刷的结果吧
点击msg修改按钮后,点击得出结论:
即使运行beforeUpdate,页面上显示的数据仍然旧。
此时,data数据是最新的,页面尚未与最新的数据同步
updated ) )一样,updated ) )使用挂接函数执行前面的步骤
查看打印结果:
点击按钮后
此时,可知接口上要素的内容和data中的msg的数据为"否"
也就是说,当updated事件运行时,页面和data数据是同步的,并且都是最新的。
经过上述两个挂接函数的操作,完成了执行阶段的生命周期函数。
r> 最后就会进入到销毁阶段的生命周期函数:同样的他们也有两个钩子函数: beforeDestory()destoryed()
销毁阶段的钩子函数我们了解就好了。 beforeDestroy()
当执行beforeDestoy钩子函数的时候,Vue已经从运行阶段进入到了销毁阶段;
当执行beforeDestory的时候,实则身上所有的data和所有的methods,以及过滤器、指令等,都处于可用状态,此时还没有真正执行销毁的过程。
当执行到destoryed函数的时候,组件已经完全销毁了,此时,组件中所有的data、methods、指令、过滤器等,都已经不可用了。
完全销毁一个实例。可清理它与其它实例的连接,解绑它的全部指令及事件监听器
并不能清除DOM,仅仅销毁实例。
经过代码的辅助理解,我们再回头看看整个图的过程,应该会更加清晰了吧。
Vue生命周期函数理解并不难,也是和代码一样至上而下执行,一步步执行。
另外下面借鉴一位儒雅的含羞草:
xuxinwen32
给出的10个钩子函数的表格总结: