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 ...
随机推荐
- Kotlin:【空安全概述】可空性、null类型、null安全
- 凸n边形的对角线最多能将其内部分成几个区域
https://math.stackexchange.com/questions/3384251/into-how-many-regions-do-the-sides-and-diagonals-of ...
- delphi编写sql脚本文件批量执行程序
程序使用DelphiXE11.1开发,用到控件UniDac9.1.1,QDAC里面的Qlog组件. 程序实现了SQL脚本文件批处理执行应用,运行效果图. 文件.pas代码 unit main; int ...
- LangChain基础篇 (01)
LangChain 是什么 Langchain 是一个开源框架,它允许开发人员将大型语言模型与外部的计算和数据源结合起来,是一个通过组合模块和能力抽象来扩展 LLM 的助手 为什么需要 LangCha ...
- Java虚拟线程探索
在Java 21中,引入了虚拟线程,这是一个非常非常重要的特性,之前一直苦苦寻找的Java协程,终于问世了.在高并发以及IO密集型的应用中,虚拟线程能极大的提高应用的性能和吞吐量. ## 什么是虚拟线 ...
- 解决NuGet加载或下载资源慢的问题
我们在使用NuGet默认的服务地址访问资源时,有时候会遇到加载或下载速度很慢的情况,原因是默认的服务地址是国外的,大家都懂.此时我们可以采取一些"措施",多添加几个国内的资源访问地 ...
- Typora Emoji图标
转自: https://www.cnblogs.com/wangjs-jacky/p/12011208.html People :smile: :laughing: :blush: :sm ...
- vue element UI el-table表格添加行点击事件
<el-table @row-click="openDetails"></el-table> //对应的 methods 中//点击行事件methods: ...
- ML树构建简明教程
数据准备 Teamviewer登录实验室服务器,访问http://172.17.128.86:8501/CleanData,按照页面对应的格式要求分别从NCBI和GISAID数据库下载数据,拖拽到对应 ...
- 有关C++程序设计基础的各种考题解答参考汇总
早先年考研的主考科目正是[算法与数据结构],复习得还算可以.也在当时[百度知道]上回答了许多相关问题,现把他们一起汇总整理一下,供读者参考. [1] 原题目地址:https://zhidao.baid ...