Vue3生命周期和钩子函数
Vue3 版本的生命周期和 Vue2 比有了些变化,所以我先站在一个初学者的角度(没有学过 Vue2 版本的新手),从新讲一下 Vue3.x 的生命周期,等你完全理解之后,我们再来和 Vue2.x 的生命周期作一个对比。
什么是生命周期
Vue 是组件化编程,从一个组件诞生到消亡,会经历很多过程,这些过程就叫做生命周期。
来个比喻,生命周期和人从出生到入土是一样的。有少年时期、有青年时期、有中年时期、有老年时期。每个时期都应该有不同的任务,可以作不同的事。
当你理解了什么是生命周期,你还了解一个概念“钩子函数”。
钩子函数: 伴随着生命周期,给用户使用的函数,操控生命周期,主要是操控钩子函数。
Vue3 的生命周期比较多,我们需要一个个给大家讲。
- setup() :开始创建组件之前,在
beforeCreate
和created
之前执行。创建的是data
和method
- onBeforeMount() : 组件挂载到节点上之前执行的函数。
- onMounted() : 组件挂载完成后执行的函数。
- onBeforeUpdate(): 组件更新之前执行的函数。
- onUpdated(): 组件更新完成之后执行的函数。
- onBeforeUnmount(): 组件卸载之前执行的函数。
- onUnmounted(): 组件卸载完成后执行的函数
- onActivated(): 被包含在
<keep-alive>
中的组件,会多出两个生命周期钩子函数。被激活时执行。 - onDeactivated(): 比如从 A 组件,切换到 B 组件,A 组件消失时执行。
- onErrorCaptured(): 当捕获一个来自子孙组件的异常时激活钩子函数(以后用到再讲,不好展现)。
注:使用<keep-alive>
组件会将数据保留在内存中,比如我们不想每次看到一个页面都重新加载数据,就可以使用<keep-alive>
组件解决。
钩子函数的使用
我在程序中依次输出对应的生命周期函数,来看看结果。
Vue3.x 生命周期在调用前需要先进行引入,我们先暂时演示前五个生命周期。
import {reactive,
toRefs,
onMounted,
onBeforeMount,
onBeforeUpdate,
onUpdated,
} from "vue";
先来说setup()
,setup 这个函数是在beforeCreate
和created
之前运行的,所以你可以用它来代替这两个钩子函数。
为了看出钩子函数执行的时机,我在setup()
函数里,编写了下面的代码:
<script lang="ts">//....
const app = {
name: "App",
setup() {
console.log("1-开始创建组件-----setup()");
const data: DataProps = reactive({
girls: ["张三", "李四", "王五"],
selectGirl: "",
selectGirlFun: (index: number) => {
data.selectGirl = data.girls[index];
},
});
onBeforeMount(() => {
console.log("2-组件挂载到页面之前执行-----onBeforeMount()");
});
onMounted(() => {
console.log("3-组件挂载到页面之后执行-----onMounted()");
});
onBeforeUpdate(() => {
console.log("4-组件更新之前-----onBeforeUpdate()");
});
onUpdated(() => {
console.log("5-组件更新之后-----onUpdated()");
});
const refData = toRefs(data);
return {
...refData,
};
},
};
export default app;
</script>
写完后可以到浏览器看一下效果,效果和你想象的应该是一样的。
1 - 开始创建组件---- - setup();2 - 组件挂载到页面之前执行---- - onBeforeMount();
3 - 组件挂载到页面之后执行---- - onMounted();
4 - 组件更新之前---- - onBeforeUpdate();
5 - 组件更新之后---- - onUpdated();
你这时候一定会有个疑问,那Vue2.X
版本的生命周期函数还可以使用吗?答案是肯定的。
你可以在setup()
函数之后编写Vue2
的生命周期函数,代码如下:
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 生命周期对比
你也许会问,那我到底是使用Vue2.x
还是Vue3.x
的生命周期钩子函数?其实这个无所谓,但是不愿混用,如果你用 setup 这种Vue3
的生命周期函数,就不要再使用Vue2
的了。为了你更好的掌握,我作了一个函数对比:
Vue2--------------vue3beforeCreate -> setup()
created -> setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed -> onUnmounted
activated -> onActivated
deactivated -> onDeactivated
errorCaptured -> onErrorCaptured
尤大神的介绍是mount
比Destroy
更形象,也和beforeMount
相对应。
除了这些钩子函数外,Vue3.x
还增加了onRenderTracked
和onRenderTriggered
函数,这两个函数放到下篇文章再讲解。这节就先到这里了。
以上是 Vue3生命周期和钩子函数 的全部内容, 来源链接: utcz.com/a/125167.html