蓝戒博客

  • 首页
  • 研发说
  • 架构论
  • 效能录
  • AI谈
  • 随笔集
智构苍穹
AI为翼,架构为骨,文化为魂,实践探新境,价值筑长青。
  1. 首页
  2. 研发说
  3. 正文

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

2025年10月24日 121点热度 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 中对话未来。

最新 热点 随机
最新 热点 随机
npm 安全更新:把握令牌变更与发布体系的迁移参考指南 TresJS:用 Vue 构建现代化交互式 3D 体验 i18n 高效实现方案:前端国际化神器安利一波 前端国际化 i18n 实践:从项目到组件库的全链路方案 GEO(生成引擎优化)完整指南:AI 搜索时代的企业内容新机会 NativeScript:用 JavaScript / TypeScript 构建真正的原生应用
前端开源工具 PinMe:极简部署体验分享大屏适配的核心痛点与一行 autofit 解决方案markdown-exit:现代化的 Markdown 解析工具Lerna + Monorepo:前端多仓库管理的最佳实践CrewAI:基于角色协作的 AI Agent 团队框架浅析2025 最推荐的 uni-app 技术栈:unibest + uView Pro 高效开发全攻略
Vue SSR 与 Next.js 实战指南:从原理到落地的全栈思考 websocket断线重连实践解决方案 夜读《弟子规》泛爱众而亲仁篇 延时摄影基础学习教程分享! flutter系列之开发模拟器debug Vue2 常见错误及解决方案:从 $attrs is readonly 到组件通信陷阱全解析
最近评论
渔夫 发布于 1 个月前(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