Vue3 版本的生命周期和 Vue2 比有了些变化,所以我先站在一个初学者的角度(没有学过 Vue2 版本的新手),从新讲一下 Vue3.x 的生命周期,等你完全理解之后,我们再来和 Vue2.x 的生命周期作一个对比。
什么是生命周期
Vue 是组件化编程,从一个组件诞生到消亡,会经历很多过程,这些过程就叫做生命周期。
来个比喻,生命周期和人从出生到入土是一样的。有少年时期、有青年时期、有中年时期、有老年时期。每个时期都应该有不同的任务,可以作不同的事。
当你理解了什么是生命周期,你还了解一个概念“钩子函数”。
钩子函数: 伴随着生命周期,给用户使用的函数,操控生命周期,主要是操控钩子函数。
Vue3 的生命周期比较多,我们需要一个个给大家讲。
- setup() :开始创建组件之前,在
beforeCreate 和created 之前执行。创建的是data 和method - onBeforeMount() : 组件挂载到节点上之前执行的函数。
- onMounted() : 组件挂载完成后执行的函数。
- onBeforeUpdate(): 组件更新之前执行的函数。
- onUpdated(): 组件更新完成之后执行的函数。
- onBeforeUnmount(): 组件卸载之前执行的函数。
- onUnmounted(): 组件卸载完成后执行的函数
- onActivated(): 被包含在
中的组件,会多出两个生命周期钩子函数。被激活时执行。 - onDeactivated(): 比如从 A 组件,切换到 B 组件,A 组件消失时执行。
- onErrorCaptured(): 当捕获一个来自子孙组件的异常时激活钩子函数(以后用到再讲,不好展现)。
注:使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <template> <div> </div> </template> <script lang="ts"> import { onMounted, onBeforeMount, onBeforeUpdate, onUpdated, } from "vue"; interface DaraProps { girls: string[]; selectGirl: string; selectGirlFun: (index: number) => void; } export default { name: "Home", setup() { console.log("1-开始创建组件-----setup()"); onBeforeMount(() => { console.log("2-组件挂载到页面之前执行-----onBeforeMount()"); }); onMounted(() => { console.log("3-组件挂载到页面之后执行-----onMounted()"); }); onBeforeUpdate(() => { console.log("4-组件更新之前-----onBeforeUpdate()"); }); onUpdated(() => { console.log("5-组件更新之后-----onUpdated()"); }); }, }; </script> |
写完后可以到浏览器看一下效果,效果和你想象的应该是一样的。
1 2 3 4 5 | 1 - 开始创建组件---- - setup(); 2 - 组件挂载到页面之前执行---- - onBeforeMount(); 3 - 组件挂载到页面之后执行---- - onMounted(); 4 - 组件更新之前---- - onBeforeUpdate(); 5 - 组件更新之后---- - onUpdated(); |
你这时候一定会有个疑问,那Vue2.X版本的生命周期函数还可以使用吗?答案是肯定的。
你可以在setup()函数之后编写Vue2的生命周期函数,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | beforeCreate() { console.log("1-组件创建之前-----beforeCreate()"); }, beforeMount() { console.log("2-组件挂载到页面之前执行-----BeforeMount()"); }, mounted() { console.log("3-组件挂载到页面之后执行-----Mounted()"); }, beforeUpdate() { console.log("4-组件更新之前-----BeforeUpdate()"); }, updated() { console.log("5-组件更新之后-----Updated()"); }, |
这时候可以看到,原来的生命周期也是完全可以使用。
Vue2.x 和 Vue3.x 生命周期对比
你也许会问,那我到底是使用
1 2 3 4 5 6 7 8 9 10 11 12 | Vue2--------------vue3 beforeCreate -> setup() created -> setup() beforeMount -> onBeforeMount mounted -> onMounted beforeUpdate -> onBeforeUpdate updated -> onUpdated beforeDestroy -> onBeforeUnmount destroyed -> onUnmounted activated -> onActivated deactivated -> onDeactivated errorCaptured -> onErrorCaptured |
通过这样对比,可以很容易的看出 vue3 的钩子函数基本是再 vue2 的基础上加了一个
-
BeforeDestroy 变成了onBeforeUnmount -
destroyed 变成了onUnmounted
尤大神的介绍是