一、入手uni-app

官方文档:uni-app官网

1.创建uni-app项目

1.1通过HBuilderX进行创建

官方地址:HBuilderX-高效极客技巧

1.2通过命令行创建
// js 版本的
npx degit dcloudio/uni-preset-vue#vite 项目名
npx degit dcloudio/uni-preset-vue#vite-alpha 项目名// ts版本的
npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project

js版本的链接:下载仓库 · DCloud/uni-preset-vue - Gitee.com

ts版本的链接:下载仓库 · DCloud/uni-preset-vue - Gitee.com

若使用 npx 下载的时候失败,可以换手机热点试试

注:下面我用的都是uni-app+ts

2.引入组件库

2.1 uni-ui
// uni-ui
pnpm @dcloudio/uni-ui

配置自动导入组件

// pages.json
{// 组件自动导入"easycom": {"autoscan": true,"custom": {// uni-ui 规则如下配置  "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue" }},"pages": [// …省略]
}

这个自动导入的方法很好用,在项目中我们有一些组件是在一个模块内,那么我们可以让这些组件有个同样的前缀名,然后通过正则表达式把这些组件整合在一起,然后可以全局调用了,不需要在使用某一个组件的时候再格外调用,减少了一些代码的重复。比如说这里的:^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue ,意思就是组件以 'uni-' 开头的就会被找到,这个路径就是组件的路径 '$1' 是占位符,所以如果当我想用 uni-badge 的时候,我就不需要再去 impor导入它,直接就能用,因为这个组件的路径是:@dcloudio/uni-ui/lib/uni-badge/uni-badge.vue

举一反三

我们在项目中一般会有一个公共组件对吧,我们就可以用上来,如果结构是这样的

/src/components/LN-compent1.vue/LN-compent2.vue/LN-...                 

这个时候就可以在custom里面加上,这样使用这些组件的时候就不用苦哈哈的去导入了

"easycom": {"autoscan": true,"custom": {// uni-ui 规则如下配置  "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue" ,"^LN-(.*)": "@/components/LN-$1.vue"}

2.2安装声明文件

pnpm i -D @uni-helper/uni-app-types@latest @uni-helper/uni-ui-types@latest

然后需要在tsconfig.json 里面进行配置

{// "extends": "@vue/tsconfig/tsconfig.json","compilerOptions": {"allowJs": true,"sourceMap": true,"baseUrl": ".","paths": {"@/*": ["./src/*"]},"lib": ["esnext", "dom"],// 从这里开始都是自己配置的"types": ["@dcloudio/types","miniprogram-api-typings","@uni-helper/uni-app-types","@uni-helper/uni-ui-types"]},"vueCompilerOptions": {"plugins": ["@uni-helper/uni-app-types/volar-plugin"]},"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

2.3 pinia

pnpm i pinia-plugin-persistedstate

跟之前web端的一样,如果想实现持久化就需要用上persist

{persist:true
}

不过uni-app为了兼容多端的API,需要这么写

    persist: {// 调整为兼容多端的APIstorage: {setItem(key, value) {uni.setStorageSync(key, value) },getItem(key) {return uni.getStorageSync(key) },},}

2.4 vscode中的插件

3.拦截器

不管是什么端的拦截器,无非就是响应拦截和请求拦截,区别就是web之前我用的axios,这里用的uni.request

import { useMemberStore } from '@/stores'const baseURL = 'https://pcapi-xiaotuxian-front-devtest.itheima.net'// 拦截器配置
const httpInterceptor = {// 拦截前触发invoke(options: UniApp.RequestOptions) {// 不是以http开头的if (!options.url.startsWith('http')) {options.url = baseURL + options.url}// 请求超时options.timeout = 10000// 添加小程序请求头标识options.header = {'source-client': 'miniapp',...options.header,}// 添加 token 请求头标识const memberStore = useMemberStore()const token = memberStore.profile?.tokenif (token) {options.header.Authorization = token}},
}// 拦截request请求
uni.addInterceptor('request', httpInterceptor)
// 拦截 uploadFile 文件上传
uni.addInterceptor('uploadFile', httpInterceptor)type Data<T> = {code: stringmsg: stringresult: T
}export const http = <T>(options: UniApp.RequestOptions) => {return new Promise<Data<T>>((resolve, reject) => {uni.request({...options,success(res) {if (res.statusCode >= 200 && res.statusCode < 300) {resolve(res.data as Data<T>)} else if (res.statusCode === 401) {// 401错误  清理用户信息,跳转到登录页const memberStore = useMemberStore()memberStore.clearProfile()uni.navigateTo({ url: '/pages/login/login' })reject(res)} else {uni.showToast({icon: 'none',title: (res.data as Data<T>).msg || '请求错误',})reject(res)}},fail(err) {uni.showToast({icon: 'none',title: '网络错误,换个网络试试',})reject(err)},})})
}

二、三大件的写法

1.所有的块级标签都用<view>标签代替了

2.span、label等等所有内联元素替换为text标签

3.img替换成了image

三、路由

1.路由的配置在pages.json

2.路由跳转使用uni.navigateTo而不是router.push()了

四、其他

1.尽量不要用npm,要不然提交发布的时候,如果体积太大会失败

2.在使用import.meta.env.DEV 进行开发的时候,要记得去tsconfig.json 里面配置;不然就会报错:

"仅当 '--module' 选项为 'es2020'、'es2022'、'esnext'、'system'、'node16'、'node18'、'node20' 或 'nodenext' 时,才允许使用 'import.meta' 元属性。"

"module": "ESNext", // 或 "es2020"、"node16" 等错误提示中允许的值
"moduleResolution": "bundler", // 配合Vite等构建工具时推荐,或对应 "node16"

注:import.meta.env.DEV 是 Vite 构建工具提供的环境变量,用于判断当前是否为开发环境。如果是开发环境就为true。

3.TS有一个很重要的点,就是他的数据类型是显式的,当我们定义某个对象的type的时候,特别是从后端获取到的某个数据的类型参数的时候,要记得和后端保持一致,不然也会报错;

比如说:我在数据库里的数据是

那么我定义这个返回的数据对象的类型里面的参数名要一模一样的对应好

4.在使用封装好的网络请求的时候,要渲染的数据要在请求中获取,不要在其他区域传递

比如说:我有一个封装好的getCategoryAPI,subCategoryList要在这个函数里面完成,不要丢到外面去引用,不然会报错找不到children,但是事实上children也是包含在内的参数

。。。有发现问题继续在这个博文更新

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

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

相关文章

IO_hw_8.29

1.使用fgets和fputs完成两个文件的拷贝&#xff0c;要求文件名使用外部传承2.注册登录代码3.思维导图4.牛客网刷题记录

数据结构(04)—— 栈和队列

Hi&#xff01;探索者们&#x1f609;&#xff0c;欢迎踏入 408 数据结构的奇妙秘境&#x1f33f;&#xff01;​ 我是 ankleless&#x1f4da;&#xff0c;和你并肩的寻宝人&#xff5e; 这是我的探险手札&#x1f5fa;️&#xff0c;里面记着链表森林的岔路陷阱&#x1f578;…

Java多线程基础:进程、线程与线程安全实战

Java多线程基础&#xff1a;进程、线程与线程安全实战 &#x1f680; 极客小贴士 &#x1f4a1; 你知道吗&#xff1f; 在Java中&#xff0c;每个线程都有自己的栈空间&#xff0c;但共享堆内存。这就像每个员工都有自己的办公桌&#xff0c;但共享公司的会议室和打印机&#…

2025 实测有效!手把手教你如何用实例代码(Python、JavaScript 、JAVA) 等实战代码,免费股票数据接口大全

​ 近年来&#xff0c;股票量化分析凭借其科学性与系统性&#xff0c;逐渐走进大众视野并受到广泛关注。对于这一领域的初学者而言&#xff0c;入门路上的第一道关卡便是如何获取全面且精准的股票数据。要知道&#xff0c;实时交易数据、历史交易记录、财务数据以及基本面信息等…

KMP 算法相关练习题

大家好&#xff0c;今天是2025年8月31日&#xff0c;上一期我给大家分享了 KMP 算法的相关知识&#xff0c;今天我来带领大家学习4道 KMP 相关的算法题。 在学习算法题之前&#xff0c;还是希望大家能够要先学会 KMP 算法&#xff08;可以参考这篇文章&#xff1a;KMP 算法&am…

张柏芝亮相林家谦演唱会 再次演绎《任何天气》

近日&#xff0c;张柏芝作为特别嘉宾亮相歌手林家谦演唱会。当天&#xff0c;张柏芝身着一袭浅米色蕾丝裙装&#xff0c;轻盈面料搭配层叠设计&#xff0c;行走间裙摆微扬&#xff0c;温柔气质满溢&#xff0c;为舞台增添了一抹温柔亮色。舞台上&#xff0c;张柏芝接连演绎《任…

Android 权限申请现代化指南

Android 权限申请现代化指南 一、核心概念&#xff1a;权限分类 Android 将权限分为三大类&#xff0c;申请方式各不相同&#xff1a; 普通权限 (Normal Permissions)范围&#xff1a;涉及应用沙盒外部但对用户隐私或设备操作风险极低的操作。示例&#xff1a;网络访问 (IN…

大话 IOT 技术(3) -- MQTT篇

文章目录前言前情提要MQTT介绍组成万恶的appmqtt服务端伪代码实现开源的力量后话当你迷茫的时候&#xff0c;请点击 物联网目录大纲 快速查看前面的技术文章&#xff0c;相信你总能找到前行的方向 前言 本篇将开始讲述IOT技术的一个重点&#xff0c;mqtt协议。 我发现有一个…

大语言模型生成的“超龄劳动者权益保障制度系统化完善建议(修订版)”

大纲 │ ├── 一、基于征求意见稿现状的评估 │ ├── 制度意义&#xff1a;25条暂行规定首次明确权益范围&#xff0c;提供法律依据 │ └── 关键缺陷 │ ├── 法律定位不明确 │ ├── 社保衔接不足 │ └── 实施机制不完善 │ ├── 二、法…

【UnityAS】Unity Android Studio 联合开发快速入门:环境配置、AAR 集成与双向调用教程

这是一篇2021年的存档&#xff0c;使用Unity2020版本。 至今&#xff0c;Unity与AS很多通讯方式也是基于此衍生。 作为Unity与AS联合开发的受益者&#xff0c;难得掏出自己的饭碗&#xff0c;诸君共享&#xff01; Unity & Android Studio 联合开发快速入门 ——Unity与AS…

前后端联合实现多个文件上传

1、前端 Vue3CommonApplyBasicInfoForm.vue<script setup lang"ts" name"CommonApplyBasicInfoForm"> ...... // 文件输入实例对象 const fileInputRef ref<HTMLInputElement | null>(null); // 选择文件列表 const selectedFiles ref<Fi…

软考高级--系统架构设计师--综合知识真题解析

系列文章目录 文章目录系列文章目录一、2019年真题二、2020年真题三、2021年真题四、2022年真题总结一、2019年真题 二、2020年真题 三、2021年真题 四、2022年真题 总结

“帕萨特B5钳盘式制动器结构设计三维PROE模型7张CAD图纸PDF图“

摘 要本文首先对汽车制动器原理和对各种各样的制动器进行分析,详细地阐述了各类制动器的结构,工作原理和优缺点。再根据轿车的车型和结构选择了适合的方案。根据市场上同系列车型的车大多数是滑钳盘式制动器,而且滑动钳式盘式制动器结构简单,性能居中,设计规范,所以我选择滑动…

SQL注入6----(其他注入手法)

一.前言 本章节来介绍一下其他的注入手法&#xff0c;也就是非常规注入手法&#xff0c;来和大家介绍一下 二.加密注入 前端提交的有些数据是加密之后&#xff0c;到了后台在解密&#xff0c;然后再进行数据库查询等相关操作的&#xff0c;那么既然如 此我们也应该将注入语句…

visual studio2022 配置 PCL 1.13.1

PCL库下载 下载链接&#xff1a; https://github.com/PointCloudLibrary/pcl/releases 下载这两个。 PCL库安装 运行.exe文件进行安装。 环境变量勾第二个&#xff08;其实无所谓&#xff0c;反正还要添加别的环境变量&#xff0c;这里没选之后加也一样&#xff09;。 安装…

金融学-货币理论

前言 前面学习了什么是货币供给&#xff0c;货币供给的决定以及联邦储备体系在货币供给中所起的作用。现在我们要开始探讨经济中货币供给在决定价格水平与全部商品和劳务(总供给)中的作用。关于货币对经济影响的研究&#xff0c;称为货币理论(monetarythe-ory) 货币数量论 古典…

Visio绘图——给多边形增加连接线

每次在画项目框图和各类爪图的时候&#xff0c;连接线是最烦人的&#xff0c;虽然选择的是折线&#xff0c;单往往事与愿违。 下面就记录一下&#xff0c;如何查找各类连接线。 1、先展开左侧菜单栏&#xff0c;点击如下所示的“&#xff1e;”2、在展开的界面&#xff0c;再次…

【开题答辩全过程】以 付费自习室系统小程序为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

开疆智能Profinet转EtherCAT网关连接TR-Electronic传感器配置案例

本案例是通过开疆智能研发的Profinet转EtherCAT网关将传感器数据传送到PLC&#xff0c;由于两边设备采用协议不同&#xff0c;故而使用网关进行转换。网关配置&#xff1a;打开网关配置软件“EtherCAT Manager”并新建项目。根据不通网关型号也可选择ModbusTCP&#xff0c;Ethe…

VSCode中使用Markdown

文章目录1. 背景2. 安装插件3. 基础写作与预览4. 生成PDF文档5. 插入代码6. 插入图片7. 小结1. 背景 编程技术人员&#xff0c;很多人写作习惯用Markdown格式吧。 首先Markdown很简单&#xff0c;第二它的层次结构特别清晰&#xff0c;再然后它对嵌入图片、代码的支持很优秀。…