美文网首页
Vue3.x 的生命周期和钩子函数

Vue3.x 的生命周期和钩子函数

作者: 一人创客 | 来源:发表于2020-10-09 22:49 被阅读0次

    Vue3 版本的生命周期和 Vue2 比有了些变化,所以我先站在一个初学者的角度(没有学过 Vue2 版本的新手),从新讲一下 Vue3.x 的生命周期,等你完全理解之后,我们再来和 Vue2.x 的生命周期作一个对比。

    什么是生命周期

    Vue 是组件化编程,从一个组件诞生到消亡,会经历很多过程,这些过程就叫做生命周期。

    来个比喻,生命周期和人从出生到入土是一样的。有少年时期、有青年时期、有中年时期、有老年时期。每个时期都应该有不同的任务,可以作不同的事。
    当你理解了什么是生命周期,你还了解一个概念“钩子函数”。

    钩子函数: 伴随着生命周期,给用户使用的函数,操控生命周期,主要是操控钩子函数。
    Vue3 的生命周期比较多,我们需要一个个给大家讲。

    • setup() :开始创建组件之前,在beforeCreatecreated之前执行。创建的是datamethod
    • onBeforeMount() : 组件挂载到节点上之前执行的函数。
    • onMounted() : 组件挂载完成后执行的函数。
    • onBeforeUpdate(): 组件更新之前执行的函数。
    • onUpdated(): 组件更新完成之后执行的函数。
    • onBeforeUnmount(): 组件卸载之前执行的函数。
    • onUnmounted(): 组件卸载完成后执行的函数
    • onActivated(): 被包含在<keep-alive>中的组件,会多出两个生命周期钩子函数。被激活时执行。
    • onDeactivated(): 比如从 A 组件,切换到 B 组件,A 组件消失时执行。
    • onErrorCaptured(): 当捕获一个来自子孙组件的异常时激活钩子函数(以后用到再讲,不好展现)。

    注:使用<keep-alive>组件会将数据保留在内存中,比如我们不想每次看到一个页面都重新加载数据,就可以使用<keep-alive>组件解决。

    <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 - 开始创建组件---- - 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--------------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 的基础上加了一个on,但也有两个钩子函数发生了变化。

    • BeforeDestroy变成了onBeforeUnmount
    • destroyed变成了onUnmounted

    尤大神的介绍是mountDestroy更形象,也和beforeMount相对应。

    相关文章

      网友评论

          本文标题:Vue3.x 的生命周期和钩子函数

          本文链接:https://www.haomeiwen.com/subject/qrwrpktx.html