生命周期钩子

 一.什么是生命周期

Vue生命周期是指vue实例对象从创建之初到销毁的过程,vue所有功能的实现都是围绕其生命周期进行的,在生命周期的不同阶段调用对应的钩子函数可以实现组件数据管理和DOM渲染两大重要功能

二.Vue实例生命周期的图示:

三.示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="example">{{message}}
        <script src="./vue.js"></script>
        <script>
            var vm = new Vue({
                el:'#example',
                data:{
                    message:'hello'
                },
                beforeCreate() {
                    console.log('beforeCreate');
                    //此时组件的选项对象还未创建,el和data并未初始化,因此无法访问methods,data,computed等上的方法和数据。
                },
                created() {
                    console.log('created');
                    //数据观测、属性和方法的运算,watch/event事件回调,完成了data数据的初始化,el没有。
                },
                beforeMount() {
                    console.log('beforeMount');
                    //编译模板,把data里面的数据和模板生成html,完成了el和data初始化
                },
                mounted() {
                    console.log('mounted');
                    //挂载完成,mounted只会执行一次。
                },
                beforeUpdate() {
                    console.log('beforeUpdate');
                    //可以在该钩子中进一步地更改状态,不会触发附加地重渲染过程。
                },
                updated() {
                    console.log('updated');
                    //组件更新后调用$destroyed函数,进行销毁
                    //this.$destroy();
                    //由于数据更改导致地虚拟DOM重新渲染和打补丁只会调用
                },
                beforeDestroy() {
                    console.log('beforeDestroy');
                    //这一步还可以用this来获取实例
                    //一般在这一步做一些重置的操作,如清除掉组件中的定时器和监听的dom事件
                },
                destroyed() {
                    console.log('destroyed');
                    //所有的事件监听器会被移出,所有的子实例也会被销毁,该钩子在服务器端渲染期间不被调用
                }
            })
        </script>
    </div>
</body>
</html>

含义

【beforeCreate】(创建前)
在实例开始初始化时同步调用。此时数据观测、事件等都尚未初始化
【created】(创建后)
在实例创建之后调用。此时已完成数据观测、事件方法,但尚未开始DOM编译,即未挂载到document中
【beforeMount】(载入前)
在mounted之前运行
【mounted】(载入后)
在编译结束时调用。此时所有指令已生效,数据变化已能触发DOM更新,但不保证$el已插入文档
【beforeUpdate】(更新前)
在实例挂载之后,再次更新实例(例如更新 data)时会调用该方法,此时尚未更新
DOM结构
【updated】(更新后)
在实例挂载之后,再次更新实例并更新完DOM结构后调用
【beforeDestroy】(销毁前)
在开始销毁实例时调用,此刻实例仍然有效
【destroyed】(销毁后)
在实例被销毁之后调用。此时所有绑定和实例指令都已经解绑,子实例也被销毁

### UniApp 生命周期钩子函数的概念和作用 UniApp 是基于 Vue.js 的跨平台开发框架,因此其生命周期钩子函数与 Vue 保持高度一致,同时针对小程序平台进行了扩展。生命周期钩子函数是指在组件或页面从创建到销毁过程中,某些特定阶段自动调用的方法,开发者可以利用这些方法执行初始化、数据加载、资源释放等操作 [^1]。 --- ### 页面级生命周期钩子函数 页面级生命周期钩子函数主要用于处理页面级别的逻辑,如页面加载、显示、隐藏、卸载等,适用于页面组件。这些钩子函数在小程序平台中有特定的对应实现: - `onLoad`:页面加载时触发,一个页面只会调用一次,可用于页面初始化数据 [^1]。 - `onShow`:页面显示时触发,每次页面显示都会调用,适合处理页面刷新或重新激活的逻辑 [^1]。 - `onReady`:页面初次渲染完成时触发,此时页面上的 DOM 已加载完毕,可以进行 DOM 操作 [^1]。 - `onHide`:页面隐藏时触发,例如跳转到其他页面或小程序进入后台 [^1]。 - `onUnload`:页面卸载时触发,用于释放资源或取消订阅事件 [^1]。 ```javascript export default { onLoad() { console.log('页面加载') }, onShow() { console.log('页面显示') }, onReady() { console.log('页面初次渲染完成') }, onHide() { console.log('页面隐藏') }, onUnload() { console.log('页面卸载') } } ``` --- ### Vue 标准组件生命周期钩子函数 这些钩子函数适用于组件级别的生命周期控制,与标准 Vue 生命周期一致: - `beforeCreate`:实例初始化之后,数据观测 (data observer) 和事件配置之前被调用 [^3]。 - `created`:实例已经创建完成,属性已绑定,但 DOM 还未生成,$el 属性还不存在 [^3]。 - `beforeMount`:挂载开始之前被调用,相关的 render 函数首次被调用 [^3]。 - `mounted`:DOM 已被挂载,可以进行 DOM 操作或发起网络请求 [^3]。 - `beforeUpdate`:响应式数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前 [^3]。 - `updated`:虚拟 DOM 重新渲染和打补丁之后调用,可以在此阶段执行依赖于 DOM 的操作 [^3]。 - `beforeDestroy`:实例销毁之前调用,此时实例仍可用 [^3]。 - `destroyed`:实例销毁后调用,所有事件监听器和子实例都被移除 [^3]。 ```javascript export default { beforeCreate() { console.log('beforeCreate') }, created() { console.log('created') }, beforeMount() { console.log('beforeMount') }, mounted() { console.log('mounted') }, beforeUpdate() { console.log('beforeUpdate') }, updated() { console.log('updated') }, beforeDestroy() { console.log('beforeDestroy') }, destroyed() { console.log('destroyed') } } ``` --- ### 区别与适用场景 页面级生命周期钩子函数主要适用于页面组件(`.vue` 文件作为页面使用),用于处理页面加载、显示、隐藏等行为;而 Vue 标准生命周期钩子适用于所有组件,包括页面组件和自定义组件,用于控制组件内部的初始化、更新和销毁过程 [^2]。 页面级钩子如 `onLoad` 和 `onShow` 无法在普通组件中使用,而 Vue 生命周期钩子如 `mounted` 和 `updated` 可以在所有组件中使用 [^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值