作为一位有Vue3基础的开发者,学习UniApp将会是一个相对平滑的过程。UniApp是一个使用Vue.js开发跨平台应用的前端框架,可以编译到iOS、Android、H5以及各种小程序平台。

一、UniApp简介

UniApp是基于Vue.js的跨平台开发框架,具有以下特点:

  • 一次开发,多端发布(iOS/Android/H5/微信小程序/支付宝小程序等)
  • 使用Vue语法,学习成本低
  • 丰富的组件和API
  • 良好的社区支持和文档

二、环境搭建

1. 安装HBuilderX

vscode也可以写uniapp,但是HBuilderX是官方推荐的IDE,下载地址:HBuilderX-高效极客技巧

2. 创建项目

  1. 打开HBuilderX
  2. 文件 → 新建 → 项目
  3. 选择"uni-app"项目模板
  4. 填写项目名称和路径
  5. 选择"默认模板"或"uni-ui项目"
  6. 点击创建

3. 项目结构

├── pages                 // 页面目录
│   ├── index             // 首页
│   │   ├── index.vue     // 首页vue文件
│   │   └── index.json    // 首页配置文件
├── static                // 静态资源
├── App.vue               // 应用入口文件
├── main.js               // 入口js文件
├── manifest.json         // 应用配置文件
└── pages.json            // 页面路由和导航栏配置

三、Vue3与UniApp的结合

1. 组合式API使用

UniApp完全支持Vue3的组合式API,你可以像在Vue3中一样使用setup()函数:

<script setup>
import { ref, onMounted } from 'vue'const count = ref(0)onMounted(() => {console.log('组件已挂载')
})function increment() {count.value++
}
</script><template><view><button @click="increment">点击计数: {{ count }}</button></view>
</template>

2. 响应式系统

UniApp使用Vue3的响应式系统,你可以直接使用refreactive

<script setup>
import { ref, reactive } from 'vue'const message = ref('Hello UniApp!')
const user = reactive({name: '张三',age: 25
})function updateUser() {user.name = '李四'user.age += 1
}
</script>

四、核心概念

1. 页面与组件

UniApp中的页面和组件都是.vue文件,但有一些区别:

  • 页面:位于pages目录下,每个页面有自己的路由路径
  • 组件:可复用的UI单元,通常放在components目录下

2. 路由系统

UniApp的路由配置在pages.json中:

{"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "首页"}},{"path": "pages/user/user","style": {"navigationBarTitleText": "用户中心"}}]
}

页面跳转使用UniApp提供的API:

// 保留当前页面,跳转到应用内的某个页面
uni.navigateTo({url: '/pages/user/user'
})// 关闭当前页面,跳转到应用内的某个页面
uni.redirectTo({url: '/pages/user/user'
})// 返回上一页面
uni.navigateBack()

3. 生命周期

UniApp在Vue生命周期基础上扩展了一些应用和页面生命周期:

​应用生命周期(App.vue中)​​:

  • onLaunch - 初始化完成时触发
  • onShow - 启动或从后台进入前台显示
  • onHide - 从前台进入后台

​页面生命周期​​:

  • onLoad - 页面加载时
  • onShow - 页面显示时
  • onReady - 页面初次渲染完成
  • onHide - 页面隐藏时
  • onUnload - 页面卸载时

在组合式API中,可以使用onXxx来监听:

import { onLoad, onShow } from '@dcloudio/uni-app'onLoad(() => {console.log('页面加载')
})onShow(() => {console.log('页面显示')
})

五、UI开发

1. 基本组件

UniApp提供了一系列跨平台组件,替换了HTML原生标签:

HTML标签UniApp组件说明
divview视图容器
spantext文本
imgimage图片
anavigator链接

示例:

<view class="container"><text>这是一段文本</text><image src="/static/logo.png" mode="aspectFit"></image>
</view>

2. 样式编写

UniApp支持大部分CSS特性,但需要注意:

  • 使用rpx作为响应式单位(1rpx ≈ 0.5px)
  • 某些CSS属性在不同平台可能有差异
  • 支持Flex布局
.container {display: flex;flex-direction: column;align-items: center;padding: 20rpx;
}.title {font-size: 32rpx;color: #333;
}

3. 条件编译

UniApp提供了条件编译来处理多端差异:

<!-- #ifdef H5 -->
<view>这段内容只在H5平台显示</view>
<!-- #endif --><!-- #ifdef MP-WEIXIN -->
<view>这段内容只在微信小程序显示</view>
<!-- #endif -->

也可以在JS中使用:

// #ifdef H5
console.log('这段代码只在H5平台执行')
// #endif

六、API调用

UniApp提供了丰富的API,涵盖设备、网络、媒体等功能:

1. 网络请求

uni.request({url: 'https://example.com/api',method: 'GET',success: (res) => {console.log(res.data)},fail: (err) => {console.error(err)}
})

2. 数据缓存

// 异步存储
uni.setStorage({key: 'token',data: 'abcdefg',success: () => {console.log('存储成功')}
})// 同步存储(推荐在setup中使用)
try {uni.setStorageSync('token', 'abcdefg')
} catch (e) {console.error(e)
}

3. 设备信息

uni.getSystemInfo({success: (res) => {console.log(res.platform) // 平台console.log(res.windowWidth) // 窗口宽度}
})

七、状态管理

对于复杂应用,可以使用Pinia进行状态管理:

1. 安装Pinia

npm install pinia @pinia/nuxt

2. 创建store

// stores/counter.js
import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', {state: () => ({count: 0}),actions: {increment() {this.count++}}
})

3. 在main.js中配置

import { createSSRApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'export function createApp() {const app = createSSRApp(App)app.use(createPinia())return {app}
}

4. 在组件中使用

<script setup>
import { useCounterStore } from '@/stores/counter'const counter = useCounterStore()
</script><template><view><text>Count: {{ counter.count }}</text><button @click="counter.increment()">增加</button></view>
</template>

八、调试与发布

1. 调试

  • H5:直接在浏览器中调试
  • 小程序:使用对应开发者工具
  • App:使用真机调试或模拟器

2. 发布

  1. HBuilderX中选择"发行"
  2. 选择目标平台(H5/小程序/App等)
  3. 根据向导完成配置
  4. 生成发布包

九、学习资源

  1. 官方文档:https://uniapp.dcloud.net.cn/
  2. UniUI组件库:https://uniapp.dcloud.net.cn/component/uniui/uni-ui.html
  3. 插件市场:https://ext.dcloud.net.cn/
  4. 社区论坛:https://ask.dcloud.net.cn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90758.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90758.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/90758.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

background和background-color的区别

前言&#xff1a;由于全局切换变量时&#xff0c;发现空页面按钮变量颜色未生效&#xff0c;审查元素发现变量未定义。实际上是背景色由纯色变成了渐变色&#xff0c;而background-color不支持渐变色导致变量不生效特性backgroundbackground-color功能设置‌所有‌背景属性&…

Vue Vue-route (5)

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue-route History模式和路由懒加载 目录 History模式 设置history模式 后端配置 Apache 路由懒加载 配置 总结 History模式 设置history模式 Vue-route默认hash模式——使用URL的hash来模拟一个完整的URL&#xff0c…

家用智能摄像机PRV文件删除的恢复方法

家用智能摄像头一般采用的是mp4或者mov视频方案&#xff0c;这一类方案文件通用性强、使用简单&#xff0c;以MP4为例无论是APP在线播放还是TF卡接电脑查看都很轻松。即便如此&#xff0c;有些厂商还是走上了“自定义”的道路&#xff0c;自定义的文件结构导致无法正常播放&…

聊下easyexcel导出

直接上干货&#xff0c;首先pom文件引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency>接下来是java代码 public void export(List<Liquidity…

[Python] Flask 多线程绘图时报错“main thread is not in main loop”的解决方案

在构建基于 Flask 的后端服务过程中,使用 matplotlib 绘图时,很多开发者会遇到一个经典的运行时错误: RuntimeError: main thread is not in main loop这通常出现在服务开启多线程时调用 matplotlib,本文将从原理、解决方式到部署建议进行全面解析。 一、问题来源:matpl…

dbEaver连接hbase,各种问题的终极解决

网上有不少文章&#xff0c;但基本都不行&#xff0c;主要还是hbase版本和phoenix版本的问题&#xff0c;经我测试&#xff0c;如下方法保证能连接成功。 1、下载phoenix: https://phoenix.apache.org/download.html 要选择和你的hbase版本对应的版本。 2、解压phoenix-hbase-2…

selenium中find_element()用法进行元素定位

1. 导入必要的模块首先需要导入 By 类&#xff1a;from selenium.webdriver.common.by import By2. 常用定位方式(1) 通过ID定位element driver.find_element(By.ID, "username") element.send_keys("testuser") # 输入内容 (2) 通过Name定位element dr…

第八讲~~数据库技术

前言&#xff1a;什么是数据库&#xff1f;存储数据的仓库。常见的数据库有哪些&#xff1f;————SQL Server&#xff08;数据库较大 5G&#xff09;————Access————Oracle&#xff08;大型数据库700多兆-200多兆&#xff09;&#xff08;付费&#xff09;————My…

无人机雷达模块运行与技术解析

一、运行方式1. 传感器数据采集 雷达发射高频电磁波&#xff08;X/Ku波段或毫米波&#xff09;&#xff0c;接收无人机反射的回波信号。 多传感器协同&#xff1a;雷达与光电、无线电侦测、声学设备并行扫描空域&#xff0c;覆盖不同频段与物理特性&#xff08;如热信号、声纹…

STM32中ADC详解

前言 在嵌入式系统中&#xff0c;模拟信号与数字信号的转换是连接物理世界与数字系统的核心环节。ADC&#xff08;Analog-to-Digital Converter&#xff0c;模数转换器&#xff09;作为实现这一转换的关键外设&#xff0c;被广泛应用于传感器数据采集&#xff08;如温湿度、光照…

机器学习(ML)、深度学习(DL)、强化学习(RL)关系和区别

机器学习&#xff08;ML&#xff09;、深度学习&#xff08;DL&#xff09;、强化学习&#xff08;RL&#xff09;关系和区别区别一、机器学习的技术分层与范畴二、深度学习&#xff08;DL&#xff09; vs. 强化学习&#xff08;RL&#xff09;&#xff1a;在ML中的对比三、深度…

医疗AI前端开发中的常见问题分析和解决方法

一、 前端性能优化问题 (医疗AI场景尤其关键) 页面加载速度慢的原因及解决方案 原因: 海量数据加载: 加载高分辨率DICOM影像序列、大型患者数据集、复杂模型参数。复杂计算: 在浏览器端运行轻量级AI推理(如分割预览)、大型图表渲染。第三方库臃肿: 医学可视化库(Corners…

python库之jieba 库

jieba 库jieba 库的原理分析jieba库可用于将中文的一段语句分解为单词,通常用于解析中文语句的含义。例如外国人需要学习中文而中文语句是一直连续的文字组合。例如“我们在学习Python办公自动化”这句话,外国人在理解这句话的含义时,首先需要将这句话正确地分解为一个个单词,即…

基于Hadoop的航空公司客户数据分析与客户群体K-measn聚类分析(含LRFMC模型)

文章目录有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍数据源介绍数据预处理hadoop集群分析建模分析总结每文一语有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 本研究依托全国范围内的航空公司…

实习内容总结

相关来自AI非内部资料 Monorepo 大仓 + pnpm + Turborepo 工程化实践原理 核心概念解释 1. Monorepo (单仓库架构) 概念:将多个项目(packages)放在同一个代码仓库中管理,而非分散在多个仓库。优势:统一管理依赖、版本一致性、跨项目复用代码、原子化提交、简化CI/CD流程…

余电快速泄放电路

余电快速泄放电路&#xff0c;即放电电路&#xff0c;用在需要快速反复开关电源&#xff0c;且负载电路上有大容量电容的场景。 断开电源开关后&#xff0c;如果负载电路有大电容&#xff0c;会引起负载电路上的电压下降缓慢。此时如果重新接上电源开关&#xff0c;负载电路在未…

MOSFET驱动电路设计时,为什么“慢”开,“快”关?

MOSFET作为开关器件&#xff0c;在驱动电路中主要用于控制电流的通断&#xff0c;比如在DC-DC转换器、电机驱动或者功率放大电路中。它的开关过程&#xff08;开和关&#xff09;会直接影响电路的效率、发热和可靠性。“慢开快关”的这个设计原则&#xff0c;背后有什么电路设计…

分音塔科技(BABEL Technology) 的公司背景、股权构成、产品类型及技术能力的全方位解读

分音塔科技&#xff08;BABEL Technology&#xff09; 的公司背景、股权构成、产品类型及技术能力的全方位解读 文章目录**分音塔科技&#xff08;BABEL Technology&#xff09;** 的公司背景、股权构成、产品类型及技术能力的全方位解读**一、公司背景&#xff1a;清华系AI企业…

2025科大讯飞AI大赛<大模型技术方向>(Datawhale AI 夏令营)

赛事报名链接&#xff1a;2025 iFLYTEK AI开发者大赛-讯飞开放平台 本赛事聚焦电商直播带货场景&#xff0c;要求基于带货视频及评论文本数据&#xff0c;完成三阶段任务&#xff1a; 任务一&#xff1a;商品识别 数据方面的信息 数据来源&#xff1a;origin_videos_data.cs…

M|电锯惊魂

rating: 7.5 豆瓣: 8.7 M&#xff5c;电锯惊魂 悬疑片&#xff0c;不恐怖。 前期中规中矩&#xff0c;中后期bug很多&#xff08;降智、剧情杀等&#xff09;&#xff0c;但是反转优秀。 总之&#xff0c;医生夫妻、两位警察在此片中各有不同程度的降智。也许是这种恐怖、悬疑电…