Skip to content

Vue 生命周期

Vue 生命周期

简介

每个 Vue 实例在被创建时都要经过一系列的初始化步骤,包括设置设置数据监听、编译模板、将实例挂载到 DOM 上,以及在数据变化时更新 DOM 等操作。

同时,在这个过程中,Vue 提供了一些称为生命周期钩子函数的接口,允许开发者在不同阶段添加自己的代码,以便在特定时刻执行特定的逻辑,这为定制和扩展 Vue 示例的行为提供了机会。

比如,页面在加载完成后,向服务器接口发起网络请求,获取页面中的数据。

生命周期钩子函数

生命周期钩子函数(Lifecycle Hooks)是 Vue 组件在不同阶段被自动调用的函数,允许在特定时刻执行特定的逻辑。

这些钩子函数都要接收一个无参无返回值的回调函数,用来执行在不同时刻需要处理的逻辑。

Vue 的生命周期函数在使用之前,需要导入。

常用的生命周期钩子函数

  • onBeforeMount: 注册一个钩子,在组件被挂载之前被调用。
  • onMounted: 注册一个回调函数,在组件挂载完成后执行。
  • onBeforeUpdate: 注册一个钩子,在组件即将因为响应式状态变更而更新其 DOM 树之前调用。
  • onUpdated: 注册一个回调函数,在组件因为响应式状态变更而更新其 DOM 树之后调用。
  • onBeforeUnmount: 注册一个钩子,在组件实例被卸载之前调用。
  • onUnmounted: 注册一个回调函数,在组件实例被卸载之后调用。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 引入 Vue -->
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <script>
        // 导入 Vue 中的函数
        const { 
            createApp, 
            ref,
            onMounted,
            onUpdated,
            onUnmounted,
            onBeforeMount, 
            onBeforeUpdate,
            onBeforeUnmount
        } = Vue

        window.onload = function(){
            createApp({
                setup() {
                    // 在基础初始化完成之后,数据和事件配置之前调用
                    onBeforeMount(() => {
                        console.log("beforeMount");
                    });

                    // 初始化全部完成,实例创建完成后立即调用
                    onMounted(() => {
                        console.log("mounted");
                    });

                    // 数据有更新,页面渲染之前调用
                    onBeforeUpdate(() => {
                        console.log("beforeUpdate");
                    });

                    // 数据有更新,页面渲染完毕后调用
                    onUpdated(() => {
                        console.log("updated");
                    });

                    // 实例销毁前调用
                    onBeforeUnmount(() => {
                        console.log("beforeDestroy");
                    });

                    // 实例销毁后调用
                    onUnmounted(() => {
                        console.log("destroyed");
                    });

                    const num = ref(0)
                    // 返回响应式变量或其他数据
                    return {
                        num
                    }
                }
            }).mount('#app');
        }
      </script>
</head>
<body>
    <div id="app">
        <div> 
            <button @click="num++">Add 1 --- [ {{ num }} ]</button>
        </div>
    </div>
</body>
</html>

生命周期示意图

下面是实例生命周期的图表。现在并不需要完全理解图中的所有内容,但以后它将是一个有用的参考。

总结

生命周期钩子函数 Vue 中提供的一些接口,通过注册钩子函数,让开发者可以在不同的时刻进行更细致的操作。