uni-app:全景语法与生命周期超详细梳理(多表格完整版)
uni-app 是基于 Vue 语法、一次开发多端发布(微信小程序/支付宝/抖音/H5/APP)的跨端框架,是目前国内小程序、跨端项目的主流开发方案。uni-app 最大特点:一套代码,多端编译、兼容 Vue2/Vue3、自带小程序API、统一各端差异。本文通过大量分类表格,全景梳理 uni-app 基础语法、模板语法、生命周期、页面与组件逻辑、条件编译、路由、样式规范、适配方案等全套核心知识点,适合零基础入门、项目开发、面试复盘。
一、uni-app 基础认知与编译原理
1.2 项目核心文件结构与作用
|
文件/目录 |
核心作用 |
|---|---|
|
pages.json |
全局核心配置:页面路由、导航栏样式、tabBar、权限、下拉刷新、全局窗口配置 |
|
manifest.json |
跨端编译配置:各端AppID、权限配置、打包配置、域名白名单、SDK配置 |
|
uni.scss |
全局样式变量文件,内置统一配色、尺寸变量,全局生效 |
|
App.vue |
全局根组件,配置全局样式、全局生命周期、全局状态 |
|
pages/ |
所有页面文件目录,每个页面独立文件夹,包含vue页面文件 |
|
components/ |
自定义组件目录,存放全局/局部复用组件 |
|
static/ |
静态资源目录,存放图片、字体、视频等静态文件,仅该目录资源可被编译识别 |
二、uni-app 模板基础语法(与Vue差异重点标注)
2.1 基础插值与渲染语法
|
语法 |
作用 |
uni-app 特殊说明 |
|---|---|---|
|
{{ 变量/表达式 }} |
文本插值,响应式渲染数据 |
与Vue一致,支持单行表达式,不支持复杂语句 |
|
v-text |
覆盖式文本渲染,无插值闪烁 |
全端兼容,小程序端性能优于插值 |
|
v-html |
渲染富文本HTML内容 |
小程序端受限,仅支持部分标签,不支持完整HTML |
|
v-bind / : |
动态绑定属性、class、style |
全端通用,class对象/数组写法完全兼容Vue |
|
v-on / @ |
绑定页面点击、输入等事件 |
小程序端事件基于原生封装,事件名与Vue一致 |
2.2 条件渲染与列表渲染
|
语法 |
作用 |
端差异与注意事项 |
|---|---|---|
|
v-if / v-else |
条件销毁/创建节点,权限、动态渲染场景 |
全端兼容,频繁切换不推荐 |
|
v-show |
控制显示隐藏,仅切换样式 |
小程序端性能优异,适合频繁显隐切换 |
|
v-for |
列表循环渲染数组、对象 |
必须绑定key,推荐:key="index"或唯一值,不支持省略key |
2.3 双向绑定 v-model 差异
|
场景 |
规则说明 |
|---|---|
|
原生组件v-model |
uni-app input/textarea/switch 等组件完全支持 v-model 双向绑定 |
|
自定义组件v-model |
Vue2 沿用 .sync 语法,Vue3 支持多 v-model,与Vue语法对齐 |
|
小程序原生限制 |
不支持表单嵌套,所有表单组件必须脱离form独立使用或规范嵌套 |
三、uni-app 专属核心语法(跨端核心)
3.1 条件编译语法(uni-app 核心特色)
条件编译是 uni-app 解决各平台API、样式、逻辑差异的核心语法,可作用于模板、脚本、样式、配置文件。
|
条件编译指令 |
作用 |
常用平台标识符 |
|---|---|---|
|
#ifdef 平台 |
仅在指定平台编译生效 |
H5、APP-PLUS、MP-WEIXIN、MP-ALIPAY、MP-DOUYIN |
|
#ifndef 平台 |
除指定平台外,其余所有平台生效 |
常用于排除小程序专属逻辑 |
|
#endif |
结束条件编译块,必须成对出现 |
所有条件编译必须收尾,否则编译报错 |
|
#ifdef H5 |
仅H5端生效代码 |
处理H5专属DOM、路由、浏览器API |
|
#ifdef MP-WEIXIN |
仅微信小程序生效 |
微信专属登录、授权、小程序订阅消息 |
|
#ifdef APP-PLUS |
仅App端生效 |
App原生插件、推送、本地权限、硬件调用 |
3.2 uni 全局API 通用规范
|
API分类 |
常用API |
作用说明 |
|---|---|---|
|
消息提示 |
uni.showToast、uni.showModal、uni.showLoading |
全局弹窗、提示、加载框,全端统一样式 |
|
路由跳转 |
uni.navigateTo、uni.redirectTo、uni.switchTab、uni.reLaunch |
页面跳转、tab切换、页面重置,替代Vue-router |
|
网络请求 |
uni.request |
统一网络请求,替代axios,全端适配 |
|
本地存储 |
uni.setStorageSync、uni.getStorageSync |
同步本地存储,替代localStorage,跨端统一 |
|
图片媒体 |
uni.chooseImage、uni.previewImage |
选图、预览图片,抹平各端媒体差异 |
四、uni-app 样式与适配语法(重点)
|
适配规则 |
语法规范 |
详细说明 |
|---|---|---|
|
统一尺寸单位 |
rpx(核心单位) |
小程序专属自适应单位,750rpx = 屏幕全屏宽度,自动适配所有机型 |
|
样式作用域 |
scoped |
style加scoped,样式仅当前页面/组件生效,防止全局污染 |
|
全局样式 |
uni.scss / App.vue样式 |
无需引入,全局自动生效,统一项目视觉规范 |
|
禁止使用单位 |
px固定尺寸 |
直接使用px会导致小屏溢出、大屏过小,移动端不推荐 |
|
H5端兼容 |
rpx自动转vw |
编译H5时,rpx自动转为vw单位,无需手动适配 |
五、uni-app 完整生命周期(页面+组件+App全局)
uni-app 生命周期分为三类:App全局生命周期、Page页面生命周期、Component组件生命周期,三者执行时机完全不同,是开发核心重点。
5.1 App.vue 全局生命周期(仅全局生效)
|
生命周期 |
执行时机 |
常用场景 |
|---|---|---|
|
onLaunch |
应用首次启动触发,全局仅执行一次 |
初始化登录、全局配置、权限校验、SDK初始化 |
|
onShow |
应用从后台切换至前台、启动时触发 |
刷新全局状态、检测网络状态 |
|
onHide |
应用切换至后台触发 |
保存临时数据、暂停播放、关闭弹窗 |
|
onError |
应用全局报错触发 |
全局异常捕获、日志上报 |
5.2 Page 页面生命周期(页面专属核心)
|
生命周期 |
执行时机 |
核心使用场景 |
|---|---|---|
|
onLoad(option) |
页面加载完成,仅执行一次,可接收路由参数 |
页面初始化、接收参数、发起首次接口请求 |
|
onShow |
页面显示/从下级页面返回/tab切换都会触发 |
每次进入页面刷新数据、刷新列表、校验登录态 |
|
onReady |
页面DOM渲染完成,仅执行一次 |
获取DOM节点、初始化动画、渲染完成操作 |
|
onHide |
页面隐藏、跳转下级页面触发 |
暂停定时器、关闭弹窗、保存页面状态 |
|
onUnload |
页面销毁卸载,仅执行一次 |
清除定时器、取消请求、销毁监听事件 |
|
onPullDownRefresh |
页面下拉刷新触发 |
列表下拉刷新数据,需手动 uni.stopPullDownRefresh() |
|
onReachBottom |
页面滚动到底部触发 |
列表上拉加载更多、分页请求 |
|
onShareAppMessage |
页面转发分享触发 |
自定义分享标题、封面、链接 |
5.3 Component 组件生命周期(Vue生命周期兼容)
uni-app 自定义组件不支持小程序页面生命周期,仅支持 Vue 标准生命周期,Vue3 组合式API完全兼容。
|
生命周期 |
执行时机 |
使用场景 |
|---|---|---|
|
setup(Vue3) |
组件初始化最早执行 |
定义响应式数据、方法、监听 |
|
onMounted |
组件DOM挂载完成 |
组件内部接口请求、DOM操作 |
|
onUpdated |
组件数据更新渲染完成 |
更新后DOM二次操作 |
|
onUnmounted |
组件销毁 |
清除定时器、解绑事件 |
5.4 生命周期执行顺序(高频面试考点)
|
场景 |
完整执行顺序 |
|---|---|
|
首次打开页面 |
App.onLaunch → App.onShow → Page.onLoad → Page.onShow → Page.onReady |
|
页面跳转下级 |
当前页 onHide → 新页面 onLoad → 新页面 onShow → 新页面 onReady |
|
返回上一级页面 |
当前页 onUnload → 上一页 onShow |
|
Tab切换页面 |
隐藏页 onHide → 显示页 onShow(不会执行onLoad) |
六、uni-app 页面路由与参数传递语法
|
路由方法 |
作用 |
页面栈变化 |
|---|---|---|
|
uni.navigateTo |
保留当前页,跳转新页面 |
页面栈+1,支持返回上一页 |
|
uni.redirectTo |
关闭当前页,跳转新页面 |
页面栈数量不变,无法返回当前页 |
|
uni.reLaunch |
关闭所有页面,跳转指定页面 |
页面栈清空,仅保留目标页 |
|
uni.switchTab |
切换tabBar页面 |
关闭所有非tab页面,仅保留tab页 |
|
uni.navigateBack |
返回上一页/多级页面 |
页面栈-1,可通过delta指定返回层数 |
七、uni-app 与 Vue、原生小程序核心差异汇总
|
对比维度 |
Vue3 |
原生小程序 |
uni-app |
|---|---|---|---|
|
运行环境 |
浏览器/DOM环境 |
小程序虚拟机,无DOM |
跨端编译,无DOM、适配多端 |
|
生命周期 |
仅Vue组件生命周期 |
页面+App专属生命周期 |
融合两者,区分全局/页面/组件生命周期 |
|
路由方案 |
vue-router |
原生页面路由API |
uni 封装路由API,统一多端 |
|
适配单位 |
px/rem/vw |
rpx |
主推rpx,自动多端适配 |
|
跨端能力 |
仅H5 |
仅对应小程序 |
一套代码多端发布 |
|
条件编译 |
无 |
无 |
专属语法,解决跨端差异 |
八、全文总结
1. 语法兼容Vue:uni-app 基于Vue语法开发,Vue3组合式API、双向绑定、组件语法完全通用,前端学习成本极低。
2. 生命周期分层:严格区分 App全局、Page页面、Component组件三类生命周期,页面独有 onLoad、onShow、下拉刷新等专属钩子。
3. 跨端核心能力:依靠 rpx 自适应单位 + 条件编译,完美抹平多端差异,实现一次开发、多端上线。
4. 原生性能优势:小程序端编译为原生代码,无DOM渲染,性能优于Webview嵌套方案,是目前国内最主流的跨端小程序开发框架。
更多推荐



所有评论(0)