蓝戒博客

  • 首页
  • 研发说
  • 架构论
  • 效能录
  • AI谈
  • 随笔集
智构苍穹
融合 AI、架构与工程实践,沉淀方法论,构建可持续的技术价值。
  1. 首页
  2. 研发说
  3. 正文

UniApp 从入门到实战:一套代码多端运行的最佳实践

2025年10月24日 220点热度 0人点赞 0条评论

一、前言

做移动端和小程序开发时常有一个痛点:

Android、iOS、微信小程序、H5 都要分别开发一遍?

UniApp 给出的答案是:不用。
它是基于 Vue.js 的跨平台框架,一套代码就能编译到微信小程序、支付宝小程序、H5、App 等多端。
生态完善、插件丰富、官方更新活跃,适合前端工程师一站式开发。


二、环境准备与项目创建

1. 安装 HBuilderX(推荐)

下载:https://www.dcloud.io/hbuilderx.html

创建项目 → 选择 uni-app 默认模板(Hello uni-app) → 命名为 my-uni-demo。

目录结构如下:

my-uni-demo/
├── pages/
│   ├── index/
│   │   └── index.vue
├── static/
├── uni.scss
├── manifest.json
├── pages.json
└── main.js

2. 启动项目

点击 运行 → 运行到浏览器(H5) 或 运行到小程序模拟器(微信),看到默认页面即成功。


三、核心知识点

页面注册

JSON
{
  "pages": [
    {
      "path": "pages/index/index",
      "style": { "navigationBarTitleText": "首页" }
    }
  ]
}

路由跳转

JavaScript
uni.navigateTo({ url: '/pages/about/about' })
uni.navigateBack()

生命周期

JavaScript
export default {
  onLoad() {},
  onShow() {},
  onPullDownRefresh() {}
}

网络请求封装

JavaScript
export const request = (options) => {
  return new Promise((resolve, reject) => {
    uni.request({
      ...options,
      header: { Authorization: uni.getStorageSync('token') || '' },
      success: (res) => res.statusCode === 200 ? resolve(res.data) : reject(res),
      fail: reject
    })
  })
}

四、实战:开发一个待办清单(ToDo List)

pages/index/index.vue:

Vue
<template>
  <view class="container">
    <view class="header">我的待办事项</view>
    <view class="add">
      <input v-model="task" placeholder="输入任务..." />
      <button @click="addTask">添加</button>
    </view>
    <view class="list">
      <view v-for="(item, index) in list" :key="index" class="item">
        <text>{{ item }}</text>
        <button @click="removeTask(index)">删除</button>
      </view>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return { task: '', list: [] }
  },
  methods: {
    addTask() {
      if (!this.task) return uni.showToast({ title: '请输入内容', icon: 'none' })
      this.list.push(this.task)
      this.task = ''
      uni.setStorageSync('todos', this.list)
    },
    removeTask(index) {
      this.list.splice(index, 1)
      uni.setStorageSync('todos', this.list)
    }
  },
  onShow() {
    this.list = uni.getStorageSync('todos') || []
  }
}
</script>

<style>
.container { padding: 20rpx; }
.header { font-size: 40rpx; margin-bottom: 20rpx; }
.add { display: flex; }
.list .item { display: flex; justify-content: space-between; margin: 10rpx 0; }
</style>

即可在多端运行。


五、常见坑与解决方案

问题原因解决办法
页面刷新状态丢失Vue 实例重载用 uni.setStorageSync 持久化
小程序不支持部分 DOM 操作渲染层隔离用 uni.createSelectorQuery()
页面栈超限小程序限制10层使用 uni.switchTab() 或 uni.reLaunch()
图片路径差异加载机制不同放 static/ 用绝对路径

六、优化与最佳实践

✅ 封装请求层
✅ 使用 Vuex 或 Pinia 管理状态
✅ 使用 UI 框架:uView Plus / ColorUI
✅ 多端调试:微信开发者工具 / 模拟器
✅ 一键发布:

  • H5 → 网站-H5
  • 微信小程序 → 小程序发行
  • App → 原生App云打包

七、总结

UniApp 实现了真正意义上的“一次开发,多端运行”。
适合中小团队或快速验证项目。
但仍需注意平台差异与原生能力限制。
合理组件化、逻辑与视图分离,是可维护项目的关键。

标签: UniApp 跨端框架
最后更新:2025年10月25日

cywcd

我始终相信,技术不仅是解决问题的工具,更是推动思维进化和创造价值的方式。从研发到架构,追求极致效能;在随笔中沉淀思考,于 AI 中对话未来。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

cywcd

我始终相信,技术不仅是解决问题的工具,更是推动思维进化和创造价值的方式。从研发到架构,追求极致效能;在随笔中沉淀思考,于 AI 中对话未来。

最新 热点 随机
最新 热点 随机
前端开发 TanStack 化:从“框架思维”到“能力组合”的工程演进 Docker 进阶(七):容器化体系设计总结与生产落地经验复盘 Docker 进阶(六):生产环境中的 Docker 安全、监控与日志体系 Docker 进阶(五):Docker + CI/CD —— 从代码提交到自动部署 Docker 进阶(四):使用 Docker Swarm 与 Kubernetes 实现容器编排 Docker 进阶(三):深入理解镜像层(Layer)与缓存机制
Workbox:可直接用于生产环境的 Service Worker 利器快速构建项目文档网站:主流文档站点工具选型与对比DiceBear:30+ 风格、完全可定制的开源头像生成解决方案ES2015 → ES2025:JavaScript 十年演进全景回顾与核心 API 总结ECMAScript 2025(ES16)深度解析20 个现代 JavaScript API 深度盘点
360安全浏览器内核渲染指定私有方案 npm 安全更新:把握令牌变更与发布体系的迁移参考指南 信息系统架构的形与魂:理论、方法与前端实践 js异步编程的解决方案全解析 云端无服时代:Serverless 架构的进化、现实与未来 CSS3之Opacity多浏览器透明度兼容处理
最近评论
渔夫 发布于 3 个月前(11月05日) 学到了,感谢博主分享
沙拉小王子 发布于 8 年前(11月30日) 适合vue入门者学习,赞一个
沙拉小王子 发布于 8 年前(11月30日) 适合vue入门者学习,赞一个
cywcd 发布于 9 年前(04月27日) 请参考一下这篇文章http://www.jianshu.com/p/fa4460e75cd8
cywcd 发布于 9 年前(04月27日) 请参考一下这篇文章http://www.jianshu.com/p/fa4460e75cd8

COPYRIGHT © 2025 蓝戒博客_智构苍穹-专注于大前端领域技术生态. ALL RIGHTS RESERVED.

京ICP备12026697号-2