目录
一、uni-app 概述
二、uni-app 的核心优势
三、经典代码案例实战
1. 基础页面结构与数据绑定
2. 条件编译处理平台差异
3. 跨端API调用示例(网络请求)
4. 页面路由与传参
5. 使用 uni-ui 组件库
四、项目实战技巧
五、调试与发布
六、高级功能探索
1. Vue3 + TypeScript 支持
2. 原生插件开发与集成
3. 状态管理进阶(Pinia)
七、跨平台适配深度策略
1. 自适应布局方案
2. 多端图标兼容方案
八、性能优化专项
1. 启动速度优化
2. 渲染性能提升
九、生态工具链集成
1. 自动化部署与CI/CD
2. 多端云打包(uniCloud)
十、企业级实战案例解析(新增)
电商项目核心模块实现
十一、调试与监控体系(新增)
1. 跨端日志收集
2. 性能监控(使用uni-perf)
十二、学习资源与社区(新增)
十三、总结
uni-app 是一款基于 Vue.js 的跨平台开发框架,支持“一次编写,多端发布”,可快速编译到 iOS、Android、Web、小程序(微信/支付宝/百度/字节跳动等)等多个平台。凭借其高效的开发体验和丰富的生态,成为跨平台开发的热门选择。
跨平台兼容性:一套代码适配多端,减少重复开发成本。
性能接近原生:通过原生渲染和优化机制提升用户体验。
开发效率高:基于 Vue.js 语法,学习成本低,生态完善。
丰富的插件市场:支持扩展原生功能(如摄像头、GPS)。
{{ message }}
说明:
使用 Vue 的响应式数据绑定实现动态内容更新。
通过 @click
绑定按钮点击事件。
// 在特定平台执行代码(如仅微信小程序)
// #ifdef MP-WEIXIN
console.log("当前运行在微信小程序环境");
uni.showToast({
title: "微信专属功能已启用",
icon: "none"
});
// #endif
// 平台判断逻辑
if (uni.getSystemInfoSync().platform === 'android') {
console.log("当前为Android设备");
}
说明:
使用 // #ifdef
和 // #endif
实现代码的条件编译。
uni.getSystemInfoSync()
获取设备信息。
uni.request({
url: 'https://api.example.com/data',
method: 'GET',
success: (res) => {
console.log("请求成功:", res.data);
uni.showModal({
title: "数据获取成功",
content: JSON.stringify(res.data)
});
},
fail: (err) => {
console.error("请求失败:", err);
}
});
说明:
使用 uni.request
发起网络请求,兼容所有平台。
返回结果通过 Promise 风格或回调函数处理。
// 跳转到新页面并传递参数
uni.navigateTo({
url: '/pages/detail/detail?id=123&name=uni-app'
});
// 在目标页面接收参数
export default {
onLoad(options) {
console.log("接收参数:", options.id, options.name); // 输出 123 和 uni-app
}
}
这是一个 uni-ui 卡片组件
说明:
通过 uni-ui
官方组件库快速构建高质量界面。
需先通过 npm 安装:npm install @dcloudio/uni-ui
。
全局样式管理:在 App.vue
中定义公共 CSS 变量:
:root {
--primary-color: #007AFF;
--font-size: 14px;
}
状态管理:小型项目可用 Vuex,大型项目推荐使用 pinia
。
调试工具:HBuilderX 内置调试器,支持真机预览。
多端发布:通过 HBuilderX
一键生成各平台代码包
# 示例:编译微信小程序
npm run dev:mp-weixin
uni-app 已全面支持 Vue3 和 TypeScript,提升开发体验:
{{ count }}
优势:
更简洁的 Composition API
类型安全减少运行时错误
场景:需调用蓝牙、传感器等原生功能时,可通过插件扩展:
编写原生插件(以Android为例):
public class MyNativeModule extends UniModule {
@UniJSMethod
public void showToast(String message) {
Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show();
}
}
前端调用:
const nativeModule = uni.requireNativePlugin('MyNativeModule');
nativeModule.showToast("Hello from Native!");
// stores/user.js
import { defineStore } from 'pinia';
export const useUserStore = defineStore('user', {
state: () => ({ token: '', username: '' }),
actions: {
async login(account, password) {
const res = await uni.request({ url: '/api/login', data: { account, password } });
this.token = res.data.token;
}
}
});
// 页面中使用
import { useUserStore } from '@/stores/user';
const userStore = useUserStore();
userStore.login('admin', '123456');
/* 使用 rpx 单位实现响应式布局 */
.container {
width: 750rpx; /* 设计稿宽度为750时,1rpx=1物理像素 */
padding: 20rpx;
}
/* 媒体查询适配不同屏幕 */
@media (min-width: 768px) {
.desktop-view { display: block; }
.mobile-view { display: none; }
}
分包加载(manifest.json
配置):
{
"subPackages": [{
"root": "subpages/user",
"pages": ["login", "profile"]
}]
}
图片压缩:使用在线工具或构建脚本自动压缩至WebP格式。
列表渲染使用
减少节点层级:
{{ item.name }}
避免频繁使用v-if
,改用v-show
或CSS控制显示。
示例脚本(GitLab CI):
build_mp_weixin:
stage: build
script:
- npm install
- npm run build:mp-weixin
artifacts:
paths:
- dist/build/mp-weixin/
配置云打包:
{
"cloud": {
"provider": "aliyun",
"spaceId": "your-space-id"
}
}
命令行触发:
uni-cli publish --platform android --isModule false
1. 购物车实时同步(WebSocket):
// 建立WebSocket连接
const socket = uni.connectSocket({
url: 'wss://api.example.com/ws',
success: () => console.log("连接成功")
});
// 监听商品数量变化
socket.onMessage(res => {
if (res.data.type === 'cart_update') {
this.cartData = res.data.payload;
}
});
2. 支付多端适配:
function pay(orderId) {
// #ifdef MP-WEIXIN
wx.requestPayment({ /* 微信小程序支付参数 */ });
// #endif
// #ifdef APP-PLUS
uni.requestPayment({
provider: 'applepay', // 或支付宝等
orderInfo: { /* 平台特定参数 */ }
});
// #endif
}
// 封装统一日志方法
const logger = {
info(msg) {
console.log(`[INFO] ${msg}`);
// 生产环境上报至服务器
if (process.env.NODE_ENV === 'production') {
uni.request({ url: '/log', method: 'POST', data: { msg } });
}
}
};
安装插件:
npm install @dcloudio/uni-perf
关键指标采集:
import { onPageStart, onPageEnd } from '@dcloudio/uni-perf';
onPageStart('home');
// ...页面逻辑
onPageEnd('home'); // 自动计算页面加载耗时
资源类型 | 推荐内容 |
---|---|
官方文档 | uni-app 官方文档 |
视频课程 | 《uni-app跨平台开发实战》慕课网系列课程 |
开源项目 | uni-app模板仓库 |
社区问答 | DCloud论坛 |
uni-app 通过其跨平台能力和 Vue.js 的友好语法,大幅提升了开发效率。本文提供的代码案例覆盖了核心开发场景,可直接应用于实际项目。对于需要快速迭代、覆盖多端的应用,uni-app 是最佳选择之一。
立即行动:
访问 uni-app 官网 获取最新文档。
在 HBuilderX 中创建项目,体验 5 分钟快速上手!