vue2&vue3&小程序简介
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 新特性与优势
Composition API(组合式API)
把零散的代码逻辑按功能打包成「积木块」,想用哪块插哪块,告别满屏乱跳的
data和methods。示例代码:
<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>
性能暴击(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) // 触发响应式更新
按需编译 + Tree Shaking
- 打包时只带走真正用到的代码,比如不用
v-model就不打包相关逻辑,项目体积瘦身 30%+。
- 打包时只带走真正用到的代码,比如不用
碎片化组件(Fragment + Teleport)
组件终于能像普通 HTML 一样写多个根标签(不用强行套
div),还能用<Teleport>把模态框「传送」到body根部,避免 CSS 层级问题。示例代码:
<template>
<!-- 合法!多个根元素 -->
<header>标题</header>
<main>内容</main> <!-- 把弹窗传送到 body 末尾 -->
<Teleport to="body">
<div class="modal">我是全局弹窗</div>
</Teleport>
</template>
TypeScript 原生支持
代码提示精准到毛孔,类型检查直接内置,再也不用和
Vue.extend斗智斗勇。示例代码:
interface User {
id: number
name: string
} const user = ref<User>({ id: 1, name: '张三' }) // 类型安全!
其他实用武器库
- 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.目录结构 首先,我们使用微信公众平台提供的开发者工具,创建一个简单的小程序项目,观察项目的目录结构 不难看出,一个典型的微信小程序,通常包含一个描述整体的主体部分,以及一个描述页面的 p ...
- 微信小程序简介
什么是微信小程序? 今年下半年的时候,微信推出了微信小程序,当然刚刚推出来的时候还是处于内测阶段,但是这并不影响这家伙的热度,也许这是一个新的时代的开启.但是什么是微信小程序呢?微信应用号是一个app ...
- 「小程序JAVA实战」微信小程序简介(一)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-01/ 一直想学习小程序,苦于比较忙,加班比较多没时间,其实这都是理由,很多时候习惯了搬砖,习惯了固 ...
- Windows学习总结(11)——Windows批处理命令编写代码及小程序简介
批处理(Batch)也称为批处理脚本.顾名思义,就是对某对象进行批量的处理.DOS批处理是基于DOS命令,用来自动地批量地执行DOS命令以实现特定操作的脚本.批处理是一种简化的脚本语言,它应用于DOS ...
- 微信小程序-简介
微信小程序定位 1. 不需要下载安装即可使用 2. 用户用完即走,不用关系是否安装太多应用 3. 应用无处不在,随时可用 # 不要安装可使用是个伪命题,因为小程序的安装包小于1M,下载安装到使用的过程 ...
- P2_小程序简介
小程序与普通网页开发的区别 运行环境不同 网页运行在浏览器环境中 小程序运行在微信环境中 API 不同 由于运行环境的不同,所以小程序中,无法调用 DOM 和 BOM 的 API. 但是,小程序中可以 ...
- vue开发小程序简介
开发环境搭建 nodejs 安装最新版的nodejs,同时安装cnpm包管理器 jdk1.8 apache-maven3.3.9 Intellij Idea2018 [后端开发工具] vscode[前 ...
- 微信小程序t填坑之旅一(接入)
一.小程序简介 小程序是什么? 首先"程序"这两个字我们不陌生.看看你手机上的各个软件,那就是程序.平时的程序是直接跑在我们原生的操作系统上面的.小程序是间接跑在原生系统上的.因为 ...
- 微信小程序开发问题汇总
前言 经过将近一个多月的开发,我们团队开发的微信小程序 "出发吧一起" 终于开发完成,现在的线上版本为 2.2.4-beta 版 本文档主要介绍该小程序在开发中所用到的技术,已经在 ...
- 零基础入门微信小程序开发
注:本文来源于:<零基础入门微信小程序开发> 课程介绍 本达人课是一个系列入门教程,目标是从 0 开始带领读者上手实战,课程以微信小程序的核心概念作为主线,介绍配置文件.页面样式文件.Ja ...
随机推荐
- Qml 中实现任意角为圆角的矩形
[写在前面] 在 Qml 中,矩形(Rectangle)是最常用的元素之一. 然而,标准的矩形元素仅允许设置统一的圆角半径. 在实际开发中,我们经常需要更灵活的圆角设置,例如只对某些角进行圆角处理,或 ...
- VulNyx - Responder靶场
靶机ip 192.168.200.9 先nmap 扫描全端口 这个22端口不知道有没有开 被过滤了 我们 收集一下靶机的ipv6地址 nmap用ipv6地址扫他的端口就能绕过 他的端口过滤 ping6 ...
- 9. SpringCloud Alibaba Sentinel 流量控制、熔断降级、系统负载,热点规则的部署设置讲解
9. SpringCloud Alibaba Sentinel 流量控制.熔断降级.系统负载,热点规则的部署设置讲解 @ 目录 9. SpringCloud Alibaba Sentinel 流量控制 ...
- JS深度理解
事件循环 程序运行需要有自己专属的内存空间,可以把这块内存简单理解为进程 每个应用至少有一个进程,进程间相互独立,要通信,也需要双方同意 线程 有进程后,就可以运行程序的代码 运行代码的 [人] 称为 ...
- 安全可信 | 通过双项测试!TeleDB实力亮剑!
近日,天翼云TeleDB数据库在中国信通院"可信数据库"系列测试的赛道上,一次性跨越"分布式事务型数据库基础能力测试"与"性能测试"的双重大 ...
- CBAM注意力模型介绍
本文分享自天翼云开发者社区<CBAM注意力模型介绍>,作者:Liuzijia 近年来,注意力机制在各项深度学习任务中表现出色.研究表明,人类视觉感知过程中,注意力机制发挥了积极的效果,可以 ...
- 多云时代!天翼云TeleDB以科技创新释放数据价值
8月17日,在第14届中国数据库技术大会(DTCC2023)上,天翼云科技有限公司数据库首席技术官李跃森以<天翼云TeleDB持续创新之路>为题发表演讲,介绍了天翼云TeleDB数据库的发 ...
- C#中使用正则将字符串中某字符不区分大小写并按全字匹配替换为空
具体代码如下所示: //将字符串中desc不区分大小写并按全字匹配替换为空 var strText = "CreatDeSce DeSc,UserName AsC"; string ...
- android无障碍开发 企业微信 机器人
实现 Android 无障碍开发 企业微信 机器人 作为一名新入行的开发者,你可能对如何开发一个支持企业微信的无障碍机器人感到迷茫.在这篇文章中,我将为你详细讲解实现这一功能的流程和代码示例. 流程概 ...
- 图片的 rgb信息 byte[] 直接转换为bmp文件
方法1: /// <summary> /// rgb像素值转换为bmp文件 /// </summary> /// <param name="buffer&quo ...