配置Vite+React+TS项目

初始化

执行npm create vite并填写项目名、用那个框架。。

配置

路径别名

vite.config.ts里面配置:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'export default defineConfig({plugins: [react()],resolve: {alias: {"@": path.resolve(__dirname, './src') // 路径别名...}}
})

如果开发环境是ts,会提示如找不到path或找不到__dirname等,需要先安装一下node的类型声明文件:
npm i -D @types/node

然后去修改根目录的tsconfig.json文件,不然你使用路径别名引入组件的时候会报错:

{"compilerOptions": {/* path alias */"paths": {"@/*": ["src/*"],...}},
}

配置Less

直接执行npm i less就行

路由

react-router-dom是处理项目中路由问题的组件库,默认是没有这个组件库,需要额外下载:
npm add react-router-dom --save-dev
在根目录下的index.tsx里面把<App />外层包裹上:

import { BrowserRouter } from "react-router-dom";
import ReactDOM from 'react-dom/client';const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement
);
root.render(<BrowserRouter><App />	</BrowserRouter>
);

自己去src里面创建router文件夹处理路由的信息,然后在App.tsx里面加上useRoutes:

import { Suspense } from 'react';
import { useRoutes } from 'react-router-dom'
import './App.css';
import routes from "./router"; // router文件夹的路由信息function App() {return (<div className="App"><Suspense fallback="loading"><div className="main">{useRoutes(routes)}</div></Suspense></div>);
}export default App;

封装Axios

import axios, { AxiosRequestConfig } from 'axios';//默认请求超时时间
const timeout = 30000;//创建axios实例
const service = axios.create({timeout,// 如需要携带cookie 该值需设为truewithCredentials: true,// headers:{//   Authorization:"Basic YWRtaW46dGVzdA=="// }
});// function getCookie(cookieName:any) {
//   const name = cookieName + "=";
//   const decodedCookie = decodeURIComponent(document.cookie);
//   const cookieArray = decodedCookie.split(';');
//   for (let i = 0; i < cookieArray.length; i++) {
//     let cookie = cookieArray[i];
//     while (cookie.charAt(0) === ' ') {
//       cookie = cookie.substring(1);
//     }
//     if (cookie.indexOf(name) === 0) {
//       return cookie.substring(name.length, cookie.length);
//     }
//   }
//   return "";
// }// const yourCookieValue = getCookie("FLOWABLE_REMEMBER_ME");// 统一请求拦截 可配置自定义headers 例如 language、token等
service.interceptors.request.use((config: any) => {// if(config.url.includes("/workFlow")){//   config.headers.cookie = 'FLOWABLE_REMEMBER_ME' + yourCookieValue//   console.log(config.headers);// }return config},error => {console.log(error)Promise.reject(error)}
)// axios返回格式
interface axiosTypes<T>{data: T;status: number;statusText: string;
}// axios.create()// 后台响应数据格式
// interface responseTypes<T>{
//   code: number,
//   msg: string,
//   result: T
// }//核心处理代码 将返回一个promise 调用then将可获取响应的业务数据
const requestHandler = <T>(method: 'get' | 'post' | 'put' | 'delete' | 'patch', url: string, params: object = {}, config: AxiosRequestConfig = {}): Promise<T> => {//   let response: Promise<axiosTypes<responseTypes<T>>>;let response: Promise<axiosTypes<any>>;// if(url.includes('/flowable')) config = {//   headers:{//   'Cookie': 'FLOWABLE_REMEMBER_ME' + yourCookieValue// }}switch(method){case 'get':response = service.get(url, {params: { ...params }, ...config});break;case 'post':response = service.post(url, params, {...config});break;case 'put':response = service.put(url, {...params}, {...config});break;case 'delete':response = service.delete(url, {params: { ...params }, ...config});breakcase 'patch':response = service.patch(url, {...params}, {...config});break;}return new Promise<T>((resolve, reject) => {response.then(res => {// 业务代码 可根据需求自行处理const data = res.data;if(res.status !== 200 && res.status !== 304){// 特定状态码 处理特定的需求if(data.code == 401){console.log('登录异常,执行登出...');}const e: string = JSON.stringify(data);console.log(`请求错误:${e}`)reject(data);}else{// 数据请求正确 使用 resolve 将结果返回resolve(res.data);}}).catch(error => {const e: string = JSON.stringify(error);console.log(`网络错误:${e}`)reject(error);})})
}// 使用 request 统一调用,包括封装的get、post、put、delete等方法
const request = {get: <T>(url: string, params?: object, config?: any) => requestHandler<T>('get', url, params, config),post: <T>(url: string, params?: object, config?: AxiosRequestConfig) => requestHandler<T>('post', url, params, config),put: <T>(url: string, params?: object, config?: AxiosRequestConfig) => requestHandler<T>('put', url, params, config),delete: <T>(url: string, params?: object, config?: AxiosRequestConfig) => requestHandler<T>('delete', url, params, config),patch: <T>(url: string, params?: object, config?: AxiosRequestConfig) => requestHandler<T>('patch', url, params, config),
};// 导出至外层,方便统一使用
export { request };

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

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

相关文章

深度学习系列53:大模型微调概述

参考系列文章&#xff1a;https://zhuanlan.zhihu.com/p/635152813 github链接&#xff1a;https://github.com/liguodongiot/llm-action 1 训练范式 下面这种instructive learning&#xff0c;在模型参数达到80亿后&#xff0c;会发生质的提升&#xff1a; 类似的还有手写pr…

C#面:简述 CTS , CLS , CLR , IL

CTS通用类型系统(Commom Type System): 它定义了在.NET平台上所有类型的规范和行为。CTS确保了不同语言编写的代码可以相互交互操作,并且可以在运行时进行类型安全的检查。 CTS主要包括以下几个方面: 数据类型:CTS定义了一组基本数据类型,如整数、浮点数、布尔值等,以…

mysql查询分析explain

EXPLAIN&#xff1a;使用EXPLAIN| DESCRIBE查看语句具体执行计划&#xff0c;并不真正执行语句&#xff08;在估计大致数据量时可以使用explain&#xff09; type&#xff1a;针对单表的访问方法 system&#xff1a;当表中只有一条记录&#xff0c;并且该表使用的存储引擎统计…

鸿蒙开发系列教程(二十三)--List 列表操作(2)

列表样式 1、设置内容间距 在列表项之间添加间距&#xff0c;可以使用space参数&#xff0c;主轴方向 List({ space: 10 }) { … } 2、添加分隔线 分隔线用来将界面元素隔开&#xff0c;使单个元素更加容易识别。 startMargin和endMargin属性分别用于设置分隔线距离列表侧…

2024HVV | 12款开源渗透测试工具(非常详细)零基础入门到精通,收藏这一篇就够了

回顾过去&#xff0c;黑客入侵异常困难&#xff0c;需要大量手动操作。然而&#xff0c;如今&#xff0c;一套自动化测试工具让渗透测试人员变身“半机械人”&#xff0c;能够比以往任何时候都更轻松地完成更多测试。以下12款开源渗透测试工具&#xff0c;可以帮助渗透测试人员…

微信小程序: 获取accessToken,手机号, 小程序二维码,openId与unionId 公共配置类(核心篇)

全文目录,一步到位 1.前言简介1.1 专栏传送门 2. 微信小程序公用功能2.1 配置准备工作2.1.1 配置文件准备(单体放yml中 微服务放配置中心)2.1.2 获取配置文件中的小程序配置2.1.3 设置redis配置 2.2 创建不同功能工具类2.2.1 创建微信服务工具类WechatServiceUtils2.2.2 创建Re…

Java 基于 SpringBoot+Vue 的酒店管理系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

每日五道java面试题之java基础篇(十)

目录: 第一题 JVM有哪些垃圾回收器&#xff1f;第二题 垃圾回收分为哪些阶段&#xff1f;第三题 线程的⽣命周期&#xff1f;线程有⼏种状态&#xff1f;第四题.ThreadLocal的底层原理第五题.并发、并⾏、串⾏之间的区别 第一题 JVM有哪些垃圾回收器&#xff1f; ● 新⽣代收集…

RTDETR改进系列指南

基于Ultralytics的RT-DETR改进项目.(89.9) 为了感谢各位对RTDETR项目的支持,本项目的赠品是yolov5-PAGCP通道剪枝算法.具体使用教程 自带的一些文件说明 train.py 训练模型的脚本main_profile.py 输出模型和模型每一层的参数,计算量的脚本(rtdetr-l和rtdetr-x因为thop库的问…

YOLOv8制作自定义数据集并训练

YOLOv8制作自定义数据集并训练 前言一、制作自定义数据集1、建立相应文件夹2、下载图片3、为图片打标签&#xff08;1&#xff09;安装labelimg&#xff08;2&#xff09;打开labelimg&#xff08;3&#xff09;标记图片 二、按比例移动自定义数据集中的内容三、建立数据集测试…

考虑分库分表的时机与问题

考虑分库分表的时机与问题 什么时候考虑分库分表&#xff1f; 在以下情况下&#xff0c;考虑分库分表可能是一个不错的选择&#xff1a; 数据量大&#xff1a;单一数据库已经无法满足数据存储和查询的需求&#xff0c;数据量巨大导致性能下降。并发量高&#xff1a;单一数据…

vue3-生产部署-性能优化

生产部署 开发环境 vs. 生产环境 在开发过程中&#xff0c;Vue 提供了许多功能来提升开发体验&#xff1a; 对常见错误和隐患的警告 对组件 props / 自定义事件的校验 响应性调试钩子 开发工具集成 然而&#xff0c;这些功能在生产环境中并不会被使用&#xff0c;一些警…

2024年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题是由安全生产模拟考试一点通提供&#xff0c;危险化学品经营单位主要负责人证模拟考试题库是根据危险化学品经营单位主…

Unity3D 游戏开发中如何判断几何形状的位置关系详解

前言 在Unity3D游戏开发中&#xff0c;经常需要判断不同几何形状之间的位置关系&#xff0c;以便进行碰撞检测、物体运动和触发事件等操作。本文将详细介绍几种常见的几何形状位置关系判断方法&#xff0c;并给出相应的技术详解和代码实现。 对惹&#xff0c;这里有一个游戏开…

对链表使用插入排序的C语言实现示例

#include <stdio.h> #include <stdlib.h>// 定义链表节点结构体 struct ListNode {int val;struct ListNode *next; };// 插入排序函数 struct ListNode* insertionSortList(struct ListNode* head) {if (head NULL || head->next NULL) {return head;}struct…

【天衍系列 03】深入理解Flink的Watermark:实时流处理的时间概念与乱序处理

文章目录 01 基本概念02 工作原理03 优势与劣势04 核心组件05 Watermark 生成器 使用06 应用场景07 注意事项08 案例分析8.1 窗口统计数据不准8.2 水印是如何解决延迟与乱序问题&#xff1f;8.3 详细分析 09 项目实战demo9.1 pom依赖9.2 log4j2.properties配置9.3 Watermark水印…

机器学习入门--LSTM原理与实践

LSTM模型 长短期记忆网络&#xff08;Long Short-Term Memory&#xff0c;LSTM&#xff09;是一种常用的循环神经网络&#xff08;RNN&#xff09;变体&#xff0c;特别擅长处理长序列数据和捕捉长期依赖关系。本文将介绍LSTM模型的数学原理、代码实现和实验结果&#xff0c;并…

OpenCV库及在ROS中使用

OpenCV库及在ROS中使用 依赖 cv_bridge image_transport roscpp rospy sensor_msgs std_msgsCMakeLists.txt添加 find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) target_link_libraries(pub_img_topic ${catkin_LIBRARIES} ${Opencv_LIBS}) C …

基于springboot大学生租房系统源码和论文

伴随着全球信息化发展&#xff0c;行行业业都与计算机技术相衔接&#xff0c;计算机技术普遍运用于各大行业&#xff0c;大学生租房系统便是其中一种。实施计算机系统来管理可以降低大学生租房管理的成本&#xff0c;使整个大学生租房的发展和服务水平有显著提升。 本论文主要面…

Github Copilot是什么?Ai高效编程!一键远程授权…

GitHub Copilot是一款Ai编程插件&#xff0c;由OpenAi和Github联合推出&#xff0c;目前支持主流的IDE编辑器安装使用&#xff0c;包括JetBrains IDEs、VSCode、Visual Studio、Neovim等。 官方地址&#xff1a;https://github.com/features/copilot 官方文档&#xff1a;http…