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. Kotlin:【空安全概述】可空性、null类型、null安全

  2. 凸n边形的对角线最多能将其内部分成几个区域

    https://math.stackexchange.com/questions/3384251/into-how-many-regions-do-the-sides-and-diagonals-of ...

  3. delphi编写sql脚本文件批量执行程序

    程序使用DelphiXE11.1开发,用到控件UniDac9.1.1,QDAC里面的Qlog组件. 程序实现了SQL脚本文件批处理执行应用,运行效果图. 文件.pas代码 unit main; int ...

  4. LangChain基础篇 (01)

    LangChain 是什么 Langchain 是一个开源框架,它允许开发人员将大型语言模型与外部的计算和数据源结合起来,是一个通过组合模块和能力抽象来扩展 LLM 的助手 为什么需要 LangCha ...

  5. Java虚拟线程探索

    在Java 21中,引入了虚拟线程,这是一个非常非常重要的特性,之前一直苦苦寻找的Java协程,终于问世了.在高并发以及IO密集型的应用中,虚拟线程能极大的提高应用的性能和吞吐量. ## 什么是虚拟线 ...

  6. 解决NuGet加载或下载资源慢的问题

    我们在使用NuGet默认的服务地址访问资源时,有时候会遇到加载或下载速度很慢的情况,原因是默认的服务地址是国外的,大家都懂.此时我们可以采取一些"措施",多添加几个国内的资源访问地 ...

  7. Typora Emoji图标

    转自: https://www.cnblogs.com/wangjs-jacky/p/12011208.html People  :smile:  :laughing:    :blush:  :sm ...

  8. vue element UI el-table表格添加行点击事件

    <el-table @row-click="openDetails"></el-table> //对应的 methods 中//点击行事件methods: ...

  9. ML树构建简明教程

    数据准备 Teamviewer登录实验室服务器,访问http://172.17.128.86:8501/CleanData,按照页面对应的格式要求分别从NCBI和GISAID数据库下载数据,拖拽到对应 ...

  10. 有关C++程序设计基础的各种考题解答参考汇总

    早先年考研的主考科目正是[算法与数据结构],复习得还算可以.也在当时[百度知道]上回答了许多相关问题,现把他们一起汇总整理一下,供读者参考. [1] 原题目地址:https://zhidao.baid ...