Vue2、Vue3、小程序页面生命周期详解

本篇将对比 Vue2、Vue3 以及小程序页面/组件的生命周期,简单梳理各自特点、差异、新增优化点。


Vue2 生命周期

beforeCreate → created → beforeMount → mounted → beforeUpdate → updated → beforeDestroy → destroyed

说明:

生命周期钩子 含义
beforeCreate 实例初始化之前,数据未挂载
created 实例创建完成,data 可访问
beforeMount 挂载前,$el 和模板已生成但未插入 DOM
mounted 挂载完成,DOM 可访问
beforeUpdate 数据更新前触发
updated 数据更新后触发(更新 DOM 后)
beforeDestroy 实例销毁前,可做清理工作
destroyed 实例销毁后

示例:

export default {
data() {
return { count: 0 }
},
created() {
console.log('组件创建完成')
},
mounted() {
console.log('DOM已挂载')
}
}

Vue3 生命周期

Vue3 提供了与 Vue2 一致的生命周期概念,并新增组合式 API 的方式定义。

组合式 API 写法

import { onMounted, onUpdated, onUnmounted } from 'vue';

export default {
setup() {
onMounted(() => {
console.log('Vue3 组件挂载')
});
}
}

Vue3 生命周期钩子对比:

Vue2 Vue3 Options API Vue3 Composition API
beforeCreate beforeCreate setup() 中逻辑
created created setup() 中逻辑
beforeMount beforeMount onBeforeMount
mounted mounted onMounted
beforeUpdate beforeUpdate onBeforeUpdate
updated updated onUpdated
beforeDestroy beforeUnmount onBeforeUnmount
destroyed unmounted onUnmounted

Vue 3 新特性与优势

  1. Composition API(组合式API)

    • 把零散的代码逻辑按功能打包成「积木块」,想用哪块插哪块,告别满屏乱跳的 datamethods

    • 示例代码

      <script setup>
      // 以前:data、methods、computed 散落各处
      // 现在:按功能聚合
      import { ref, computed } from 'vue' // 计数器逻辑打包成一个「积木块」
      function useCounter() {
      const count = ref(0)
      const double = computed(() => count.value * 2)
      const increment = () => count.value++
      return { count, double, increment }
      } // 直接插到组件里用
      const { count, double, increment } = useCounter()
      </script>
  2. 性能暴击(Proxy 取代 defineProperty)

    • Vue2 用「贴纸条」(Object.defineProperty)监听数据,Vue3 改用「监控摄像头」(Proxy),数组修改、对象新增属性再也不用手动 $set

    • 示例代码

      // Vue2:数组 push 需要特殊处理
      this.$set(this.list, index, newValue) // Vue3:直接莽,全自动监听
      const list = reactive([1, 2, 3])
      list.push(4) // 触发响应式更新
  3. 按需编译 + Tree Shaking

    • 打包时只带走真正用到的代码,比如不用 v-model 就不打包相关逻辑,项目体积瘦身 30%+。
  4. 碎片化组件(Fragment + Teleport)

    • 组件终于能像普通 HTML 一样写多个根标签(不用强行套 div),还能用 <Teleport> 把模态框「传送」到 body 根部,避免 CSS 层级问题。

    • 示例代码

      <template>
      <!-- 合法!多个根元素 -->
      <header>标题</header>
      <main>内容</main> <!-- 把弹窗传送到 body 末尾 -->
      <Teleport to="body">
      <div class="modal">我是全局弹窗</div>
      </Teleport>
      </template>
  5. TypeScript 原生支持

    • 代码提示精准到毛孔,类型检查直接内置,再也不用和 Vue.extend 斗智斗勇。

    • 示例代码

      interface User {
      id: number
      name: string
      } const user = ref<User>({ id: 1, name: '张三' }) // 类型安全!
  6. 其他实用武器库

    • Suspense:异步组件加载时显示 loading 状态(类似 React)。
    • 自定义渲染器:用 Vue 语法开发小程序/Canvas 应用。
    • Vite 加持:秒级热更新,告别 webpack 漫长等待。

Vue 组件相关生命周期

生命周期 含义
props 更新 Vue2 和 Vue3 均可监听 props 变化(通过 watch)
slot 渲染 在 mounted 后插槽内容可以访问
异步组件 Vue3 支持 defineAsyncComponent 封装异步组件

示例:异步组件

import { defineAsyncComponent } from 'vue';

const MyAsync = defineAsyncComponent(() => import('./MyComponent.vue'));

小程序生命周期

页面生命周期

onLoad → onShow → onReady → onHide → onUnload
生命周期 含义
onLoad 页面加载,接受参数
onShow 页面显示,类似 activated
onReady 页面初次渲染完成
onHide 页面隐藏
onUnload 页面卸载

组件生命周期

created → attached → ready → detached
生命周期 含义
created 组件实例刚创建
attached 节点插入页面 DOM
ready 组件布局完成
detached 节点从页面移除

示例:页面

Page({
onLoad(query) {
console.log('页面加载', query);
},
onReady() {
console.log('页面初次渲染完成');
}
})

示例:组件

Component({
lifetimes: {
created() {
console.log('组件创建');
},
ready() {
console.log('组件渲染完成');
}
}
})

总结对比

平台 生命周期粒度 特点
Vue2 清晰但耦合 生命周期集中在 Options 中
Vue3 更灵活 Composition API 更利于逻辑复用、类型支持更好
小程序 分页面/组件 生命周期更贴近原生环境,适合事件驱动模型

适配建议:

  • 如果要构建大规模应用,Vue3 推荐使用组合式 API 搭配 TypeScript;
  • 小程序推荐封装一层统一生命周期处理,方便复用;
  • Vue2 项目可以渐进迁移 Vue3,重构时可引入 Composition API。

推荐工具:

  • Vue3 Composition API 官方指南
  • 小程序开发者工具调试生命周期
  • Vueuse 处理常见生命周期逻辑

vue2&vue3&小程序简介的更多相关文章

  1. 入门系列(一) 微信小程序简介

    一.简介 1.目录结构 首先,我们使用微信公众平台提供的开发者工具,创建一个简单的小程序项目,观察项目的目录结构 不难看出,一个典型的微信小程序,通常包含一个描述整体的主体部分,以及一个描述页面的 p ...

  2. 微信小程序简介

    什么是微信小程序? 今年下半年的时候,微信推出了微信小程序,当然刚刚推出来的时候还是处于内测阶段,但是这并不影响这家伙的热度,也许这是一个新的时代的开启.但是什么是微信小程序呢?微信应用号是一个app ...

  3. 「小程序JAVA实战」微信小程序简介(一)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-01/ 一直想学习小程序,苦于比较忙,加班比较多没时间,其实这都是理由,很多时候习惯了搬砖,习惯了固 ...

  4. Windows学习总结(11)——Windows批处理命令编写代码及小程序简介

    批处理(Batch)也称为批处理脚本.顾名思义,就是对某对象进行批量的处理.DOS批处理是基于DOS命令,用来自动地批量地执行DOS命令以实现特定操作的脚本.批处理是一种简化的脚本语言,它应用于DOS ...

  5. 微信小程序-简介

    微信小程序定位 1. 不需要下载安装即可使用 2. 用户用完即走,不用关系是否安装太多应用 3. 应用无处不在,随时可用 # 不要安装可使用是个伪命题,因为小程序的安装包小于1M,下载安装到使用的过程 ...

  6. P2_小程序简介

    小程序与普通网页开发的区别 运行环境不同 网页运行在浏览器环境中 小程序运行在微信环境中 API 不同 由于运行环境的不同,所以小程序中,无法调用 DOM 和 BOM 的 API. 但是,小程序中可以 ...

  7. vue开发小程序简介

    开发环境搭建 nodejs 安装最新版的nodejs,同时安装cnpm包管理器 jdk1.8 apache-maven3.3.9 Intellij Idea2018 [后端开发工具] vscode[前 ...

  8. 微信小程序t填坑之旅一(接入)

    一.小程序简介 小程序是什么? 首先"程序"这两个字我们不陌生.看看你手机上的各个软件,那就是程序.平时的程序是直接跑在我们原生的操作系统上面的.小程序是间接跑在原生系统上的.因为 ...

  9. 微信小程序开发问题汇总

    前言 经过将近一个多月的开发,我们团队开发的微信小程序 "出发吧一起" 终于开发完成,现在的线上版本为 2.2.4-beta 版 本文档主要介绍该小程序在开发中所用到的技术,已经在 ...

  10. 零基础入门微信小程序开发

    注:本文来源于:<零基础入门微信小程序开发> 课程介绍 本达人课是一个系列入门教程,目标是从 0 开始带领读者上手实战,课程以微信小程序的核心概念作为主线,介绍配置文件.页面样式文件.Ja ...

随机推荐

  1. Qml 中实现任意角为圆角的矩形

    [写在前面] 在 Qml 中,矩形(Rectangle)是最常用的元素之一. 然而,标准的矩形元素仅允许设置统一的圆角半径. 在实际开发中,我们经常需要更灵活的圆角设置,例如只对某些角进行圆角处理,或 ...

  2. VulNyx - Responder靶场

    靶机ip 192.168.200.9 先nmap 扫描全端口 这个22端口不知道有没有开 被过滤了 我们 收集一下靶机的ipv6地址 nmap用ipv6地址扫他的端口就能绕过 他的端口过滤 ping6 ...

  3. 9. SpringCloud Alibaba Sentinel 流量控制、熔断降级、系统负载,热点规则的部署设置讲解

    9. SpringCloud Alibaba Sentinel 流量控制.熔断降级.系统负载,热点规则的部署设置讲解 @ 目录 9. SpringCloud Alibaba Sentinel 流量控制 ...

  4. JS深度理解

    事件循环 程序运行需要有自己专属的内存空间,可以把这块内存简单理解为进程 每个应用至少有一个进程,进程间相互独立,要通信,也需要双方同意 线程 有进程后,就可以运行程序的代码 运行代码的 [人] 称为 ...

  5. 安全可信 | 通过双项测试!TeleDB实力亮剑!

    近日,天翼云TeleDB数据库在中国信通院"可信数据库"系列测试的赛道上,一次性跨越"分布式事务型数据库基础能力测试"与"性能测试"的双重大 ...

  6. CBAM注意力模型介绍

    本文分享自天翼云开发者社区<CBAM注意力模型介绍>,作者:Liuzijia 近年来,注意力机制在各项深度学习任务中表现出色.研究表明,人类视觉感知过程中,注意力机制发挥了积极的效果,可以 ...

  7. 多云时代!天翼云TeleDB以科技创新释放数据价值

    8月17日,在第14届中国数据库技术大会(DTCC2023)上,天翼云科技有限公司数据库首席技术官李跃森以<天翼云TeleDB持续创新之路>为题发表演讲,介绍了天翼云TeleDB数据库的发 ...

  8. C#中使用正则将字符串中某字符不区分大小写并按全字匹配替换为空

    具体代码如下所示: //将字符串中desc不区分大小写并按全字匹配替换为空 var strText = "CreatDeSce DeSc,UserName AsC"; string ...

  9. android无障碍开发 企业微信 机器人

    实现 Android 无障碍开发 企业微信 机器人 作为一名新入行的开发者,你可能对如何开发一个支持企业微信的无障碍机器人感到迷茫.在这篇文章中,我将为你详细讲解实现这一功能的流程和代码示例. 流程概 ...

  10. 图片的 rgb信息 byte[] 直接转换为bmp文件

    方法1: /// <summary> /// rgb像素值转换为bmp文件 /// </summary> /// <param name="buffer&quo ...