uniapp学习心得

一、UniApp 核心优势

  1. 跨平台能力

    • 一套代码可编译到 iOS、Android、H5、小程序等多个平台,大幅减少重复开发。

    • 通过条件编译处理平台差异:

      javascript

      复制

      下载

      // #ifdef H5
      console.log("仅在H5平台生效");
      // #endif
  2. 基于 Vue.js 生态

    • 熟悉 Vue 语法即可快速上手,支持 Vuex 状态管理。

    • 注意差异点:如没有 DOM 操作,需改用 uni API。

  3. 丰富的组件和插件市场

    • 内置 scroll-viewswiper 等高性能组件。

    • 插件市场(如 uViewUI)可快速集成常用功能。


二、关键学习心得

1. 项目结构与配置
  • 目录规范

    复制

    下载

    /components   // 公用组件
    /pages        // 页面文件(需在pages.json注册)
    /static       // 静态资源
    /store        // Vuex 状态管理
  • 重要配置文件

    • manifest.json:应用名称、图标等原生配置。

    • pages.json:路由、导航栏样式、页面配置。

2. 开发调试技巧
  • 多端调试

    • H5:直接浏览器调试。

    • 小程序:需下载开发者工具,注意微信的域名白名单限制。

    • App:真机调试必备,使用 uni-app 官方调试基座。

  • 性能优化

    javascript

    复制

    下载

    // 图片懒加载
    <image lazy-load mode="widthFix" src="..."></image>
    
    // 避免过度使用响应式数据
    export default {
      data() {
        return {
          staticData: {}, // 非必要不响应式的数据
          __rawData: null // 使用__前缀标记非响应数据
        }
      }
    }
3. 常见坑与解决方案
  • 样式兼容性问题

    • 使用 rpx 替代 px 实现自适应布局。

    • 部分 CSS 属性需加前缀(如 -webkit-box-orient)。

  • 原生功能调用

    javascript

    复制

    下载

    // 调用摄像头
    uni.chooseImage({
      count: 1,
      success: (res) => {
        this.avatar = res.tempFilePaths[0];
      }
    });
  • 生命周期注意

    • App 专有生命周期 onLaunchonShow

    • 页面返回需用 uni.navigateBack() 而非浏览器历史。


三、实战经验

1. 多端适配策略
  • API 兼容

    javascript

    复制

    下载

    function getSystemInfo() {
      return new Promise((resolve) => {
        // #ifdef APP-PLUS
        plus.device.getInfo(resolve);
        // #endif
    
        // #ifdef MP-WEIXIN
        wx.getSystemInfo({ success: resolve });
        // #endif
      });
    }
  • UI 适配方案

    • 使用 Flex 布局 + rpx 单位。

    • 复杂场景通过 uni.getSystemInfoSync() 动态计算布局。

2. 状态管理优化
  • Vuex 模块化

    javascript

    复制

    下载

    // store/modules/user.js
    export default {
      state: { token: '' },
      mutations: {
        SET_TOKEN(state, token) {
          state.token = token;
        }
      }
    }
  • 持久化存储

    javascript

    复制

    下载

    uni.setStorageSync('token', res.token); // 同步存储
3. 打包发布要点
  • App 打包

    • 使用 HBuilderX 云打包或本地打包。

    • 注意证书配置(Android 用 keystore,iOS 需开发者账号)。

  • 小程序提审

    • 压缩图片资源,主包不超过 2MB。

    • 提前配置合法域名。


四、学习资源推荐

  1. 官方文档uniapp.dcloud.io(必读)

  2. 实战课程

    • B站《UniApp 跨平台开发实战》

    • 慕课网《UniApp 商业级应用开发》

  3. 社区

    • DCloud 论坛

    • GitHub 开源项目(如 uni-starter 模板)


五、关键知识点

1. 条件编译

不同平台的代码差异化处理:

javascript

复制

下载

// #ifdef H5
console.log("仅H5平台生效"); 
// #endif

// #ifdef MP-WEIXIN
wx.login(); // 仅微信小程序执行
// #endif
2. 自适应单位 rpx

自动根据屏幕宽度缩放(750rpx = 100%屏幕宽度):

css

复制

下载

.container {
  width: 750rpx; /* 满屏宽度 */
  font-size: 32rpx; /* 约等于16px */
}

3. 基础组件
  • 视图容器

    html

    复制

    下载

    运行

    <scroll-view scroll-y @scrolltolower="loadMore">
      <view v-for="item in list">{{item}}</view>
    </scroll-view>
  • 表单组件

    html

    复制

    下载

    运行

    <input v-model="text" @confirm="submit" />
    <button @click="scanQRCode">扫码</button>
4. 路由导航

javascript

复制

下载

// 跳转页面(类似vue-router)
uni.navigateTo({ url: '/pages/detail?id=1' });

// 接收参数
onLoad(options) {
  console.log(options.id); // 输出1
}

5. 平台专有API调用

javascript

复制

下载

// 调用摄像头
uni.chooseImage({
  count: 1,
  success: (res) => {
    this.avatar = res.tempFilePaths[0]; 
  }
});
6. 样式兼容方案

css

复制

下载

/* 解决iOS滚动卡顿 */
scroll-view {
  -webkit-overflow-scrolling: touch;
}

/* 安卓按钮点击高亮 */
button {
  -webkit-tap-highlight-color: transparent;
}

7. Vuex 模块化

javascript

复制

下载

// store/modules/user.js
export default {
  state: { token: '' },
  mutations: {
    SET_TOKEN(state, token) {
      state.token = token;
    }
  }
}
8. 持久化存储

javascript

复制

下载

// 存数据
uni.setStorageSync('token', 'abc123');

// 取数据
const token = uni.getStorageSync('token');

9. 图片懒加载

html

复制

下载

运行

<image lazy-load mode="widthFix" src="..."></image>
10. 减少响应式数据

javascript

复制

下载

export default {
  data() {
    return {
      __staticList: [], // 非响应式数据(加__前缀约定)
      reactiveData: {}  // 需要响应式的数据
    }
  }
}

11. 多平台配置

manifest.json 中配置各平台参数:

json

复制

下载

"mp-weixin": {
  "appid": "wx123456",
  "requiredBackgroundModes": ["audio"]
}
12. 分包加载

pages.json 中配置分包:

json

复制

下载

"subPackages": [{
  "root": "subpackage",
  "pages": [{
    "path": "pageA",
    "style": { ... }
  }]
}]

13. 微信小程序白名单

需在 manifest.json 配置域名:

json

复制

下载

"mp-weixin": {
  "networkTimeout": {
    "request": 10000
  },
  "permission": {
    "scope.userLocation": {
      "desc": "需要获取您的地理位置"
    }
  }
}
14. App端权限处理

Android需在 manifest.json 声明:

json

复制

下载

"android": {
  "permissions": [
    "<uses-permission android:name=\"android.permission.CAMERA\"/>"
  ]
}


一、平台差异与兼容性

1. 条件编译是核心技能
  • 问题:不同平台(H5/小程序/App)的API和组件表现不一致

  • 解决

    javascript

    复制

    下载

    // #ifdef H5
    alert('H5弹窗');
    // #endif
    // #ifdef MP-WEIXIN
    wx.showToast({ title: '微信Toast' });
    // #endif
2. CSS 兼容性坑
  • 典型问题

    • iOS 滚动卡顿

    • Android 按钮点击高亮

  • 解决方案

    css

    复制

    下载

    /* 修复iOS滚动 */
    .scroll-view {
      -webkit-overflow-scrolling: touch;
    }
    /* 去除Android高亮 */
    button {
      -webkit-tap-highlight-color: transparent;
    }

二、性能优化要点

1. 图片处理
  • 错误示范:直接使用大图无优化

  • 正确做法

    html

    复制

    下载

    运行

    <image 
      lazy-load 
      webp="true" 
      :src="imgUrl" 
      mode="widthFix"
    ></image>
2. 数据渲染优化
  • 长列表必用<scroll-view> + 分页加载

    javascript

    复制

    下载

    loadData() {
      if(this.loading) return;
      this.loading = true;
      api.getList().then(res => {
        this.list = [...this.list, ...res.data];
        this.loading = false;
      })
    }

三、路由与导航陷阱

1. 页面栈限制
  • 小程序限制:最多10层页面栈

  • 解决方案

    javascript

    复制

    下载

    // 超过5层时用redirectTo
    if(getCurrentPages().length >= 5) {
      uni.redirectTo({ url: '/pages/new' });
    } else {
      uni.navigateTo({ url: '/pages/new' });
    }
2. 传参安全
  • 危险做法

    javascript

    复制

    下载

    uni.navigateTo({ url: `/detail?id=${敏感数据}` });
  • 推荐方案

    javascript

    复制

    下载

    uni.setStorageSync('temp_data', {id: 123});
    uni.navigateTo({ url: '/pages/detail' });

四、原生功能开发

1. App端权限处理
  • 必须配置

    json

    复制

    下载

    // manifest.json
    "android": {
      "permissions": [
        "<uses-permission android:name=\"android.permission.CAMERA\"/>"
      ]
    }
  • 动态申请

    javascript

    复制

    下载

    uni.authorize({
      scope: 'scope.camera',
      success: () => { uni.chooseImage() }
    })
2. 插件使用原则
  • 选择标准

    1. 查看插件最近更新时间(半年内最佳)

    2. 优先选DCloud官方认证插件

    3. 测试Demo再集成


五、调试技巧

1. 多端同步调试

bash

复制

下载

# H5
npm run dev:h5
# 微信小程序
npm run dev:mp-weixin
2. 真机调试必备
  • Android:开启USB调试 + HBuilderX真机运行

  • iOS:需苹果开发者账号 + TestFlight


六、学习过程中需要注意的问题

学习 UniApp 时需要注意以下关键点,结合具体场景和解决方案,帮助你高效避坑:


1.1平台差异与兼容性

1. 条件编译是核心技能
  • 问题:不同平台(H5/小程序/App)的API和组件表现不一致

  • 解决

    javascript

    复制

    下载

    // #ifdef H5
    alert('H5弹窗');
    // #endif
    // #ifdef MP-WEIXIN
    wx.showToast({ title: '微信Toast' });
    // #endif
2. CSS 兼容性坑
  • 典型问题

    • iOS 滚动卡顿

    • Android 按钮点击高亮

  • 解决方案

    css

    复制

    下载

    /* 修复iOS滚动 */
    .scroll-view {
      -webkit-overflow-scrolling: touch;
    }
    /* 去除Android高亮 */
    button {
      -webkit-tap-highlight-color: transparent;
    }

2.1.性能优化要点

1. 图片处理
  • 错误示范:直接使用大图无优化

  • 正确做法

    html

    复制

    下载

    运行

    <image 
      lazy-load 
      webp="true" 
      :src="imgUrl" 
      mode="widthFix"
    ></image>
2. 数据渲染优化
  • 长列表必用<scroll-view> + 分页加载

    javascript

    复制

    下载

    loadData() {
      if(this.loading) return;
      this.loading = true;
      api.getList().then(res => {
        this.list = [...this.list, ...res.data];
        this.loading = false;
      })
    }

3.1路由与导航陷阱

1. 页面栈限制
  • 小程序限制:最多10层页面栈

  • 解决方案

    javascript

    复制

    下载

    // 超过5层时用redirectTo
    if(getCurrentPages().length >= 5) {
      uni.redirectTo({ url: '/pages/new' });
    } else {
      uni.navigateTo({ url: '/pages/new' });
    }
2. 传参安全
  • 危险做法

    javascript

    复制

    下载

    uni.navigateTo({ url: `/detail?id=${敏感数据}` });
  • 推荐方案

    javascript

    复制

    下载

    uni.setStorageSync('temp_data', {id: 123});
    uni.navigateTo({ url: '/pages/detail' });

4.1原生功能开发

1. App端权限处理
  • 必须配置

    json

    复制

    下载

    // manifest.json
    "android": {
      "permissions": [
        "<uses-permission android:name=\"android.permission.CAMERA\"/>"
      ]
    }
  • 动态申请

    javascript

    复制

    下载

    uni.authorize({
      scope: 'scope.camera',
      success: () => { uni.chooseImage() }
    })
2. 插件使用原则
  • 选择标准

    1. 查看插件最近更新时间(半年内最佳)

    2. 优先选DCloud官方认证插件

    3. 测试Demo再集成


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值