vue的一生【生命周期函数】

本文通过实例解析Vue.js的生命周期,包括beforeCreate、created、beforeMount、mounted等各个阶段,展示了各阶段中Vue实例的状态。同时,文章探讨了如何在不同生命周期钩子中进行初始化操作、发起请求以及组件销毁等实践应用。最后,作者强调了实践在理解Vue生命周期中的重要性。

前言

生命周期听着并不陌生,但不太会用。。。
所以今天来啃啃这个硬骨头。

开始

vue.js生命周期官方文档:https://cn.vuejs.org/v2/guide/instance.html

生命周期图示:
在这里插入图片描述
在这里插入图片描述

这样子看可能还不太理解,来看看实例:

<div id="app">
        {{message}}
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el: '#app',
            data: {
                message: 'hi,i am test'
            },
            beforeCreate: function () {
                console.group('--------beforeCreate 创建前状态---------')
                console.log("%c%s", "color:red", "el :" + this.$el)
                console.log("%c%s", "color:red", "data :" + this.$data)
                console.log("%c%s", "color:red", "message :" + this.message)
            },
            created: function () {
                console.group('--------created 创建完毕状态---------')
                console.log("%c%s", "color:red", "el :" + this.$el)
                console.log("%c%s", "color:red", "data :" + this.$data)
                console.log("%c%s", "color:red", "message :" + this.message)
            },
            beforeMount: function () {
                console.group('--------beforeMount 挂载前状态---------')
                console.log("%c%s", "color:red", "el :" + this.$el)
                console.log(this.$el)
                console.log("%c%s", "color:red", "data :" + this.$data)
                console.log("%c%s", "color:red", "message :" + this.message)
            },
            mounted: function () {
                console.group('--------mounted 挂载完成状态---------')
                console.log("%c%s", "color:red", "el :" + this.$el)
                console.log(this.$el)
                console.log("%c%s", "color:red", "data :" + this.$data)
                console.log("%c%s", "color:red", "message :" + this.message)
            },
            beforeUpdate: function () {
                console.group('--------beforeUpdate 更新前状态---------')
                console.log("%c%s", "color:red", "el :" + this.$el)
                console.log(this.$el)
                console.log("%c%s", "color:red", "data :" + this.$data)
                console.log("%c%s", "color:red", "message :" + this.message)
            },
            updated: function () {
                console.group('--------updated 完成更新状态---------')
                console.log("%c%s", "color:red", "el :" + this.$el)
                console.log(this.$el)
                console.log("%c%s", "color:red", "data :" + this.$data)
                console.log("%c%s", "color:red", "message :" + this.message)
            },
            beforeDestroy: function () {
                console.group('--------beforeDestroy 销毁前状态---------')
                console.log("%c%s", "color:red", "el :" + this.$el)
                console.log(this.$el)
                console.log("%c%s", "color:red", "data :" + this.$data)
                console.log("%c%s", "color:red", "message :" + this.message)
            },
            destroyed: function () {
                console.group('--------destroyed 销毁完成状态---------')
                console.log("%c%s", "color:red", "el :" + this.$el)
                console.log(this.$el)
                console.log("%c%s", "color:red", "data :" + this.$data)
                console.log("%c%s", "color:red", "message :" + this.message)
            }
        })
    </script>

在控制台显示出来的效果是怎么样的

在这里插入图片描述

beforecreated:el 和 data 并未初始化
created:完成了 data 数据的初始化,el没有
beforeMount:完成了 el 和 data 初始化
mounted :完成挂载

测试beforeUpdate与updated

更改message观察更新前与更新后的变化
在这里插入图片描述
销毁vue实例观察销毁前与销毁后的变化
在这里插入图片描述
这么多钩子函数,看着有点乱欸
举个例子该怎么用吧:
比如created:做一些初始化,实现函数自执行
mounted:发起后端请求,拿回数据。

也还是懵懵懂懂,实践得真知,以后运用到实际项目中或许就会有更清楚的认识吧。

主要参考的是这位大佬的文章然后自己实践了一下:https://segmentfault.com/a/1190000008010666

<think>好的,我现在需要回答用户关于UniApp中Vue3生命周期函数的使用说明及示例的问题。首先,我得回想一下UniApp和Vue3的相关知识。用户提到了站内引用,里面提到了应用级和页面级的生命周期钩子,还有组合式API的使用。所以我的回答需要结合Vue3的组合式API和UniApp特有的生命周期。 首先,Vue3的组合式API中,常用的生命周期钩子有onMounted、onUpdated、onUnmounted等,这些应该是在setup函数中使用的。而UniApp作为跨平台框架,可能还有自己的页面生命周期,比如onLoad、onShow、onReady等,需要和Vue3的钩子结合起来使用。 接下来,我需要确定用户的问题重点是什么。他们想要了解生命周期函数的具体用法及示例,所以应该分点说明,可能分为应用级生命周期、页面级生命周期,以及组合式API中的使用方式。同时,可能需要对比Vue3原有的生命周期和UniApp新增的部分。 然后,我需要考虑示例代码的结构。在组合式API中,通常会使用setup()函数,并且引入生命周期钩子,比如import { onMounted } from 'vue',然后在setup中调用。但UniApp的页面生命周期可能需要使用uni-app提供的钩子,比如onLoad、onShow,这些可能需要直接在导出对象中定义,或者通过特定的函数来注册。 此外,用户提供的引用中提到“声明钩子函数步骤”,可能需要说明如何在setup中使用这些钩子,或者是否需要使用特定的UniApp函数来绑定。例如,在页面中,可能需要同时使用Vue3的onMounted和UniApp的onLoad,这时候需要解释它们的执行顺序和用途。 可能的疑问点:UniApp的生命周期和Vue3的生命周期是如何协作的?在组件和页面中,它们的触发顺序是怎样的?是否有冲突或者需要注意的地方? 还需要检查是否有错误,比如是否所有的UniApp生命周期都支持在Vue3中使用,或者是否有变化。例如,Vue3中的beforeCreate和created已经被setup替代,所以在组合式API中可能不需要再使用它们,而UniApp的页面生命周期是否仍然有效。 另外,用户可能需要了解如何在同一页面中同时使用Vue3的生命周期和UniApp的生命周期,以及它们各自的应用场景。例如,onLoad用于接收页面参数,而onMounted用于DOM操作,但由于UniApp多平台的特点,DOM操作可能受限,所以需要说明注意事项。 最后,要确保示例代码正确,符合UniApp和Vue3的语法规范,比如使用export default导出页面配置,在setup中使用组合式API,正确导入所需的函数等。 总结回答结构: 1. 应用级生命周期:介绍UniApp中的应用生命周期,如onLaunch、onShow等,并说明在Vue3中的使用方式,可能是在App.vue中使用。 2. 页面级生命周期:分点列出onLoad、onShow、onReady等,给出示例代码,说明每个钩子的用途。 3. 组合式API中的使用:如何在setup函数中使用Vue3的钩子,如onMounted,同时结合UniApp的页面钩子。 4. 注意事项:执行顺序、兼容性、平台差异等。 5. 示例代码:展示一个完整的页面示例,包含UniApp和Vue3的生命周期钩子使用。 在整理过程中需要确保术语准确,比如“组合式API”对应Vue3的Composition API,UniApp的页面生命周期是否在Vue3中仍然有效,可能需要查阅官方文档确认。此外,用户提供的引用中提到了官方文档和组合式API的生命周期钩子,所以回答中需要引用这些内容,并在末尾添加引用标识。</think>以下是UniApp中Vue3生命周期函数的详细说明及使用示例: ### 一、Vue3组合式API生命周期钩子 在Vue3的组合式API中,主要使用以下核心生命周期函数: $$ \begin{aligned} &\text{onBeforeMount()} \quad \text{// 挂载前}\\ &\text{onMounted()} \quad \quad \ \ \text{// 挂载完成}\\ &\text{onBeforeUpdate()} \quad \text{// 更新前}\\ &\text{onUpdated()} \quad \quad \ \ \text{// 更新完成}\\ &\text{onBeforeUnmount()} \quad \text{// 卸载前}\\ &\text{onUnmounted()} \quad \quad \text{// 卸载完成} \end{aligned} $$ ### 二、UniApp特有生命周期 UniApp在Vue3基础上扩展了跨平台生命周期[^2]: #### 1. 应用级生命周期(App.vue) ```javascript export default { onLaunch: function(options) { console.log('应用初始化', options) }, onShow: function(options) { console.log('应用显示', options) }, onHide: function() { console.log('应用隐藏') } } ``` #### 2. 页面级生命周期 ```javascript import { onMounted } from 'vue' export default { setup() { onMounted(() => { console.log('Vue3挂载完成') }) }, // UniApp页面生命周期 onLoad(options) { console.log('页面加载', options) }, onShow() { console.log('页面显示') }, onReady() { console.log('页面初次渲染完成') }, onHide() { console.log('页面隐藏') }, onUnload() { console.log('页面卸载') } } ``` ### 三、执行顺序示例 当首次进入页面时: 1. `onLoad` → 2. `onShow` → 3. `onBeforeMount` → 4. `onMounted` → 5. `onReady` ### 四、组合使用示例 ```javascript import { ref, onMounted } from 'vue' export default { setup() { const count = ref(0) onMounted(() => { console.log('DOM挂载完成,可操作DOM') }) return { count } }, onLoad(options) { console.log('接收页面参数:', options) uni.request({ url: 'https://api.example.com/data' }) }, onPullDownRefresh() { console.log('下拉刷新触发') this.count++ uni.stopPullDownRefresh() } } ``` ### 五、注意事项 1. **平台差异**:`onReady`在小程序中对应`onLoad`之后触发,H5端与`onMounted`几乎同时执行 2. **异步处理**:页面跳转传参建议在`onLoad`中处理 3. **组件生命周期**:自定义组件需使用Vue3标准生命周期钩子 4. **兼容性**:使用`onUnmounted`替代旧版的`beforeDestroy`和`destroyed`[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值