Vue2的生命周期分为8个:
- beforeCreate:实例被创建之前,可以做一些初始化工作
- created:实例创建完成后,可以进行数据的监控,事件的监听等操作
- beforeMount:在挂载之前被调用,可以进行模板编译等操作
- mounted:实例被挂载到页面上后调用,可以进行DOM操作等
- beforeUpdate:数据更新时调用,但是DOM还没有重新渲染
- updated:数据更新且DOM重新渲染后调用
- beforeDestroy:实例被销毁前调用,可以进行善后工作
- destroyed:实例被销毁后调用,可以进行垃圾回收等操作
Vue3的生命周期分为9个:
- beforeCreate:实例被创建之前,可以做一些初始化工作
- created:实例创建完成后,可以进行数据的监控,事件的监听等操作
- beforeMount:在挂载之前被调用,可以进行模板编译等操作
- onBeforeMount:和beforeMount类似,在挂载之前被调用,但是在服务端渲染时不会被调用
- mounted:实例被挂载到页面上后调用,可以进行DOM操作等
- onMounted:和mounted类似,在挂载完成后调用,但是在服务端渲染时不会被调用
- beforeUpdate:数据更新时调用,但是DOM还没有重新渲染
- onBeforeUpdate:和beforeUpdate类似,在更新之前被调用,但是在服务端渲染时不会被调用
- updated:数据更新且DOM重新渲染后调用
Vue2和Vue3的生命周期有一些相同和不同之处。
相同之处:
- beforeCreate:在实例化之前被调用。
- created:实例已经创建完成之后被调用。
- beforeMount:在挂载之前被调用。
- mounted:实例已经挂载到DOM上之后被调用。
- beforeUpdate:组件更新之前被调用。
- updated:组件更新之后被调用。
- beforeUnmount:组件卸载之前被调用。
- unmounted:组件卸载之后被调用。
不同之处:
- Vue3引入了新的生命周期函数 -
beforeUnmount
和unmounted
,代替了Vue2的beforeDestroy
和destroyed
函数。 - Vue3增加了一个新的生命周期函数 -
setup
,它是在组件实例化之前就会被调用。 - Vue3的
beforeCreate
和created
函数中的this.$attrs
和this.$listeners
属性已经被移除了,需要通过setup
函数中的参数来访问它们。 - Vue3增加了一个全新的渲染函数 -
render()
,与Vue2不同的是,在Vue3中使用了更加高效和灵活的渲染函数,可以更好地优化性能。