UniApp 与微信小程序详细对比

devtools/2024/10/19 5:26:12/

UniApp 与微信小程序详细对比

1. 开发环境

  • 微信小程序
    • 主要使用微信开发者工具
    • 提供模拟器、调试工具和性能监控
    • 只能开发微信小程序
  • UniApp:
    • 主要使用 HBuilderX,但也支持 VS Code 等其他编辑器
    • HBuilderX 提供可视化界面、代码提示、调试工具等
    • 可以开发多平台应用,包括小程序、H5、App 等

2. 项目结构

  • 微信小程序
    ├── pages/                 # 页面文件夹
    ├── components/            # 自定义组件文件夹
    ├── utils/                 # 工具函数文件夹
    ├── app.js                 # 全局 JS
    ├── app.json               # 全局配置
    ├── app.wxss               # 全局样式
    └── project.config.json    # 项目配置文件
    
  • UniApp:
    ├── pages/                 # 页面文件夹
    ├── components/            # 自定义组件文件夹
    ├── static/                # 静态资源文件夹
    ├── store/                 # Vuex 状态管理(可选)
    ├── App.vue                # 应用配置,用来配置App全局样式以及监听应用生命周期
    ├── main.js                # Vue 初始化入口文件
    ├── manifest.json          # 配置应用名称、图标、权限等打包信息
    └── pages.json             # 配置页面路由、导航条、选项卡等页面类信息
    

3. 页面文件

  • 微信小程序
    • .wxml:页面结构(类似 HTML)
    • .wxss:页面样式(类似 CSS)
    • .js:页面逻辑
    • .json:页面配置
  • UniApp:
    • .vue 文件,包含三个部分:
      • <template>:页面结构(支持小程序组件和 HTML 标签)
      • <script>:页面逻辑
      • <style>:页面样式(支持 CSS 预处理器,如 SCSS、Less)

4. 基础组件

微信小程序UniApp说明
viewview视图容器,类似于 div
texttext文本组件
imageimage图片组件
buttonbutton按钮组件
inputinput输入框组件
textareatextarea多行输入框组件
scroll-viewscroll-view可滚动视图区域
swiperswiper滑块视图容器
navigatornavigator页面链接组件
progressprogress进度条组件
checkboxcheckbox多选框组件
radioradio单选框组件
pickerpicker底部弹起的滚动选择器
sliderslider滑动选择器
switchswitch开关选择器
formform表单组件

注:UniApp 支持更多 HTML5 标准组件,在 App 端和 H5 端表现更接近标准 HTML。

5. 生命周期

微信小程序UniApp (Vue3 组合式 API)说明
onLoadonLoad页面加载时触发
onShowonShow页面显示时触发
onReadyonReady页面初次渲染完成时触发
onHideonHide页面隐藏时触发
onUnloadonUnload页面卸载时触发
onPullDownRefreshonPullDownRefresh用户下拉刷新时触发
onReachBottomonReachBottom页面上拉触底时触发
onShareAppMessageonShareAppMessage用户点击右上角分享时触发
onPageScrollonPageScroll页面滚动时触发
onTabItemTaponTabItemTap点击 tab 时触发
onResizeonResize页面尺寸变化时触发

注:

  1. UniApp 在 Vue3 组合式 API 中,这些钩子需要单独引入使用。
  2. UniApp 还提供了额外的应用生命周期,如 onLaunch、onShow、onHide 等。

6. 数据绑定与更新

  • 微信小程序

    Page({data: {message: 'Hello',list: [1, 2, 3]},changeMessage() {this.setData({ message: 'Hi','list[0]': 4  // 修改数组元素})}
    })
    
    <view>{{message}}</view>
    <view wx:for="{{list}}" wx:key="*this">{{item}}</view>
    
  • UniApp (Vue3 组合式 API):

    import { ref, reactive } from 'vue'export default {setup() {const message = ref('Hello')const list = reactive([1, 2, 3])function changeMessage() {message.value = 'Hi'list[0] = 4  // 直接修改响应式数组}return {message,list,changeMessage}}
    }
    
    <view>{{message}}</view>
    <view v-for="item in list" :key="item">{{item}}</view>
    

7. 条件渲染

  • 微信小程序
    <view wx:if="{{condition}}">True</view>
    <view wx:elif="{{condition2}}">Condition2</view>
    <view wx:else>False</view>
    
  • UniApp:
    <view v-if="condition">True</view>
    <view v-else-if="condition2">Condition2</view>
    <view v-else>False</view>
    

8. 列表渲染

  • 微信小程序
    <view wx:for="{{items}}" wx:key="id">{{index}}: {{item.name}}
    </view>
    
  • UniApp:
    <view v-for="(item, index) in items" :key="item.id">{{index}}: {{item.name}}
    </view>
    

9. 事件处理

  • 微信小程序
    <button bindtap="handleClick" data-id="{{item.id}}">点击</button>
    
    Page({handleClick(event) {const id = event.currentTarget.dataset.idconsole.log('Clicked item:', id)}
    })
    
  • UniApp:
    <button @click="handleClick(item.id)">点击</button>
    
    export default {methods: {handleClick(id) {console.log('Clicked item:', id)}}
    }
    

10. 路由导航

  • 微信小程序
    // 页面跳转
    wx.navigateTo({ url: '/pages/about/about?id=1' })// 页面重定向
    wx.redirectTo({ url: '/pages/login/login' })// 页面返回
    wx.navigateBack({ delta: 1 })// Tab 切换
    wx.switchTab({ url: '/pages/home/home' })
    
  • UniApp:
    // 页面跳转
    uni.navigateTo({ url: '/pages/about/about?id=1' })// 页面重定向
    uni.redirectTo({ url: '/pages/login/login' })// 页面返回
    uni.navigateBack({ delta: 1 })// Tab 切换
    uni.switchTab({ url: '/pages/home/home' })
    

11. 网络请求

  • 微信小程序
    wx.request({url: 'https://api.example.com/data',method: 'GET',data: { id: 1 },header: {'content-type': 'application/json'},success(res) {console.log(res.data)},fail(err) {console.error(err)}
    })
    
  • UniApp:
    uni.request({url: 'https://api.example.com/data',method: 'GET',data: { id: 1 },header: {'content-type': 'application/json'},success(res) {console.log(res.data)},fail(err) {console.error(err)}
    })
    
    注:UniApp 还支持使用 async/await 语法:
    try {const res = await uni.request({url: 'https://api.example.com/data',method: 'GET',data: { id: 1 }})console.log(res.data)
    } catch (err) {console.error(err)
    }
    

12. 存储

  • 微信小程序
    // 设置存储
    wx.setStorageSync('key', 'value')// 获取存储
    const value = wx.getStorageSync('key')// 移除存储
    wx.removeStorageSync('key')// 清除所有存储
    wx.clearStorageSync()
    
  • UniApp:
    // 设置存储
    uni.setStorageSync('key', 'value')// 获取存储
    const value = uni.getStorageSync('key')// 移除存储
    uni.removeStorageSync('key')// 清除所有存储
    uni.clearStorageSync()
    

13. 组件创建和使用

  • 微信小程序
    创建组件(my-component.js):

    Component({properties: {myProperty: {type: String,value: ''}},data: {innerValue: ''},methods: {myMethod() {// 方法实现}}
    })
    

    使用组件(在页面的 json 文件中):

    {"usingComponents": {"my-component": "/components/my-component/my-component"}
    }
    

    在 wxml 中:

    <my-component my-property="value"></my-component>
    
  • UniApp:
    创建组件(MyComponent.vue):

    <template><view>{{myProperty}}</view>
    </template><script>
    export default {name: 'MyComponent',props: {myProperty: {type: String,default: ''}},data() {return {innerValue: ''}},methods: {myMethod() {// 方法实现}}
    }
    </script>
    

    使用组件(在父组件中):

    <template><my-component :my-property="value"></my-component>
    </template><script>
    import MyComponent from '@/components/MyComponent.vue'export default {components: {MyComponent}
    }
    </script>
    

14. 全局配置

  • 微信小程序(app.json):
    {"pages": ["pages/index/index","pages/logs/logs"],"window": {"backgroundTextStyle": "light","navigationBarBackgroundColor": "#fff","navigationBarTitleText": "WeChat","navigationBarTextStyle": "black"},"tabBar": {"list": [{"pagePath": "pages/index/index","text": "首页"},{"pagePath": "pages/logs/logs","text": "日志"}]}
    }
    
  • UniApp:
    pages.json:
    {"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "首页"}},{"path": "pages/logs/logs","style": {"navigationBarTitleText": "日志"}}],"globalStyle": {"navigationBarTextStyle": "black","navigationBarTitleText": "UniApp","navigationBarBackgroundColor": "#F8F8F8","backgroundColor": "#F8F8F8"},"tabBar": {"color": "#7A7E83","selectedColor": "#3cc51f","borderStyle": "black","backgroundColor": "#
    

http://www.ppmy.cn/devtools/125108.html

相关文章

Nacos2.1.0 2.2.3服务注册流程分析

/***************************************nacos2.1.0集群后台任务***************************************/ 1.集群节点服务状态报告。 当前节点把本机的IP、权重循环调用其它节点通知。 ServerListManager.ServerStatusReporter 2.定时从集群其它节点获取它们的详细信息,做…

大数据毕业设计选题推荐-B站热门视频数据分析-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

7、Spring Boot 3.x集成RabbitMQ动态实例等操作

一、前言 本篇主要是围绕着 Spring Boot 3.x 与 RabbitMQ 的动态配置集成&#xff0c;对比上一篇文章&#xff0c;进一步集成RabbitMQ动态操作&#xff0c;比如动态新增 RabbitMQ 实例&#xff0c;以及动态实例中的交换机、队列等操作。二、动态RabbitMQ实例&#xff0c;创建、…

L1 Sklearn 衍生概念辨析 - 回归/分类/聚类/降维

背景 前文中我们提到&#xff1a; Scikit-Learn 库的算法主要有四类&#xff1a;分类、回归、聚类、降维&#xff1a; 回归&#xff1a;线性回归、决策树回归、SVM回归、KNN 回归&#xff1b;集成回归&#xff1a;随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees。…

ESP32-C3实现网页显示ADC的电压-(改进版)

源码 #include <WiFi.h> #include <WebServer.h>// 替换为你的WiFi网络名称和密码 const char* ssid "123"; const char* password "1234678901";WebServer server(80); // 创建一个Web服务器对象&#xff0c;监听80端口// 定义ADC引脚 co…

桶排序(Bucket Sort)

桶排序&#xff08;Bucket Sort&#xff09;是一种用于排序的算法&#xff0c;适合于分布均匀的数值数据。其基本思路是将数据分到有限数量的桶中&#xff0c;每个桶再单独进行排序&#xff0c;最后将各个桶中的元素合并起来。 桶排序首先要确认桶的数量。桶的数量应该与待排序…

Java后端面试题(day16)

目录 java常见的引用类型java中深拷贝和浅拷贝如何设计一个秒杀系统?谈一下对高并发的理解&#xff0c;平时怎么处理高并发问题?Comparable和Comparator区别&#xff1f;解决hash冲突有哪些方法&#xff1f;Synchronized锁的升级过程 java常见的引用类型 java的引用类型一般分…

Python 工具库每日推荐 【BeautifulSoup】

文章目录 引言Python工具库的重要性今日推荐:BeautifulSoup工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例获取 BeautifulSoup 官网文档首页的标题与所有图片案例分析扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计模式 专栏…