目录
一、uni-app 概述
uni-app 是一款基于 Vue.js 的跨平台开发框架,支持“一次编写,多端发布”,可快速编译到 iOS、Android、Web、小程序(微信/支付宝/百度/字节跳动等)等多个平台。凭借其高效的开发体验和丰富的生态,成为跨平台开发的热门选择。
二、uni-app 的核心优势
-
跨平台兼容性:一套代码适配多端,减少重复开发成本。
-
性能接近原生:通过原生渲染和优化机制提升用户体验。
-
开发效率高:基于 Vue.js 语法,学习成本低,生态完善。
-
丰富的插件市场:支持扩展原生功能(如摄像头、GPS)。
三、经典代码案例实战
1. 基础页面结构与数据绑定
<template>
<view class="container">
<text>{{ message }}</text>
<button @click="changeMessage">点击修改内容</button>
</view>
</template>
<script>
export default {
data() {
return {
message: "Hello, uni-app!"
};
},
methods: {
changeMessage() {
this.message = "数据绑定成功!";
}
}
};
</script>
<style>
.container {
padding: 20px;
text-align: center;
}
</style>
说明:
-
使用 Vue 的响应式数据绑定实现动态内容更新。
-
通过
@click
绑定按钮点击事件。
2. 条件编译处理平台差异
// 在特定平台执行代码(如仅微信小程序)
// #ifdef MP-WEIXIN
console.log("当前运行在微信小程序环境");
uni.showToast({
title: "微信专属功能已启用",
icon: "none"
});
// #endif
// 平台判断逻辑
if (uni.getSystemInfoSync().platform === 'android') {
console.log("当前为Android设备");
}
说明:
-
使用
// #ifdef
和// #endif
实现代码的条件编译。 -
uni.getSystemInfoSync()
获取设备信息。
3. 跨端API调用示例(网络请求)
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 风格或回调函数处理。
4. 页面路由与传参
// 跳转到新页面并传递参数
uni.navigateTo({
url: '/pages/detail/detail?id=123&name=uni-app'
});
// 在目标页面接收参数
export default {
onLoad(options) {
console.log("接收参数:", options.id, options.name); // 输出 123 和 uni-app
}
}
5. 使用 uni-ui 组件库
<template>
<view>
<uni-card title="卡片标题">
<text>这是一个 uni-ui 卡片组件</text>
<uni-icons type="contact" size="30"></uni-icons>
</uni-card>
</view>
</template>
<script>
import { uniCard, uniIcons } from '@dcloudio/uni-ui';
export default {
components: { uniCard, uniIcons }
};
</script>
说明:
-
通过
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
六、高级功能探索
1. Vue3 + TypeScript 支持
uni-app 已全面支持 Vue3 和 TypeScript,提升开发体验:
<script setup lang="ts">
import { ref } from 'vue';
const count = ref(0);
const increment = () => count.value++;
</script>
<template>
<view>
<text>{{ count }}</text>
<button @click="increment">+1</button>
</view>
</template>
优势:
-
更简洁的 Composition API
-
类型安全减少运行时错误
2. 原生插件开发与集成
场景:需调用蓝牙、传感器等原生功能时,可通过插件扩展:
-
编写原生插件(以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!");
3. 状态管理进阶(Pinia)
// 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');
七、跨平台适配深度策略
1. 自适应布局方案
/* 使用 rpx 单位实现响应式布局 */
.container {
width: 750rpx; /* 设计稿宽度为750时,1rpx=1物理像素 */
padding: 20rpx;
}
/* 媒体查询适配不同屏幕 */
@media (min-width: 768px) {
.desktop-view { display: block; }
.mobile-view { display: none; }
}
2. 多端图标兼容方案
<template>
<view>
<!-- 小程序使用原生图标,App使用自定义图标 -->
<uni-icons v-if="isH5" type="home" size="30"></uni-icons>
<image v-else src="/static/icon-home.png"></image>
</view>
</template>
<script>
export default {
computed: {
isH5() {
return process.env.VUE_APP_PLATFORM === 'h5';
}
}
};
</script>
八、性能优化专项
1. 启动速度优化
-
分包加载(
manifest.json
配置):{ "subPackages": [{ "root": "subpages/user", "pages": ["login", "profile"] }] }
-
图片压缩:使用在线工具或构建脚本自动压缩至WebP格式。
2. 渲染性能提升
-
列表渲染使用
<block>
减少节点层级:<block v-for="item in list" :key="item.id"> <view class="item">{{ item.name }}</view> </block>
-
避免频繁使用
v-if
,改用v-show
或CSS控制显示。
九、生态工具链集成
1. 自动化部署与CI/CD
示例脚本(GitLab CI):
build_mp_weixin:
stage: build
script:
- npm install
- npm run build:mp-weixin
artifacts:
paths:
- dist/build/mp-weixin/
2. 多端云打包(uniCloud)
-
配置云打包:
{ "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
}
十一、调试与监控体系(新增)
1. 跨端日志收集
// 封装统一日志方法
const logger = {
info(msg) {
console.log(`[INFO] ${msg}`);
// 生产环境上报至服务器
if (process.env.NODE_ENV === 'production') {
uni.request({ url: '/log', method: 'POST', data: { msg } });
}
}
};
2. 性能监控(使用uni-perf)
-
安装插件:
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 分钟快速上手!