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 ...
随机推荐
- Spring AI 提交 PR 实战指南:避免常见坑
今天,我们将简单地了解如何向 Spring AI 提交 PR(Pull Request).在这个过程中,有一些常见的坑需要大家注意和避免,特别是在 Git 操作方面.我们会重点关注提交信息的规范,如何 ...
- FOFA 图标哈希值大全
FOFA 图标哈希值大全 服务 图标 哈希值 默认端口 Atlassian Crowd icon_hash="-1231308448" 8095 CouchDB icon_hash ...
- Q:查看服务器内存和cpu占用排名
pid 表示进程 ID,cmd 表示进程命令行,%mem 表示进程占用内存百分比,%cpu 表示进程占用 CPU 百分比,--sort=-%mem 表示按照内存占用率从高到低排序. 1.内存占比排序 ...
- Q:Win10关闭内存压缩功能
微软在Win10中就已经启用了内存压缩机制,在Win11当中继续了这一设定. 通过任务管理器查看. taskmgr ·通过命令行查看. 使用系统管理员权限,打开PowerShell,然后输入以下命令: ...
- Q:浏览器不能上网,但是可以ping通外网ip,dns配置也没问题(TCP/IP 无法建立传出连接)
问题症状 每隔一段时间,浏览器不能访问外网,重启电脑又正常,重置网卡无效 可以ping通外网ip地址,可以ping通外网域名 ping不通外网端口端口 查看日志 每次出现不能上网情况时都会有至少两条T ...
- Q:su命令无法切换用户问题,密码正确可登录
一.文件权限问题 查看文件权限: ll -a /bin/su /usr/bin/passwd 正确的结果为: 错误的结果为: suid和普通x执行权限 s:当普通用户使用su的时候,采用的是owner ...
- THUWC 之后到 2.9 的总结
考试 题解还没来得及写. 还是出现没有得到预期得分的情况,有时是没有调试完成,有时是挂分. 但是从做题情况看来,做我熟悉的题目比方说偏数学和性质的一般没有劣势.但是在数据结构比较不熟练,技巧和 tri ...
- HT-018 Div3 构造 题解 [ 黄 ] [ 数学 ] [ 结论 ]
构造:结论题,gcy数竞大佬tql%%%orz. 结论 先放结论:如果 \(x \bmod 4=2\) ,那么 \(x\) 无法被表示为 \(a^2-b^2\) 的形式:除此之外的其他数都可以. 证明 ...
- Thymeleaf 嵌套循环
<label th:each="role:${roles}" class="check-box"> <input th:each=" ...
- 用于敏捷开发的最佳免费 UML 工具 2022
Table of Contents hide 1 最好的在线免费 UML图工具 2 免费的 UML Visual Paradigm 在线平台 3 其他福利 4 用于正式和大规模可视化建模的 Vis ...