当前位置: 首页 > news >正文

配置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.lryc.cn/news/300762.html

相关文章:

  • 2.13:C语言测试题
  • ubuntu22.04 有一台机器说有4T硬盘,但是df的时候看不到,怎么查找
  • 【机器学习】数据清洗之识别重复点
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之NavDestination组件
  • tokio tcp通信
  • LCR 122. 路径加密【简单】
  • SpringUtils 工具类,方便在非spring管理环境中获取bean
  • JavaWeb之请求
  • VsCode中常用的正则表达式操作
  • ubuntu22.04@laptop OpenCV Get Started: 007_color_spaces
  • mysql 查询性能优化关键点总结
  • React - 分页插件默认是英文怎么办
  • 揭开Markdown的秘籍:引用|代码块|超链接
  • 【C语言】Debian安装并编译内核源码
  • 使用 C++23 从零实现 RISC-V 模拟器(6):权限支持
  • 针对某终端安全自检钓鱼工具的分析
  • XSS数据接收平台
  • MySQL 基础知识(六)之数据查询(一)
  • C#使用哈希表对XML文件进行查询
  • vscode写MATLAB配置
  • 第13章 网络 Page734 “I/O对象”的链式传递 单独的火箭发射函数,没有用对的智能指针
  • Git 存储大文件
  • 使用 Mermaid 创建流程图,序列图,甘特图
  • 政安晨:在Jupyter中【示例演绎】Matplotlib的官方指南(二){Image tutorial}·{Python语言}
  • gem5学习(20):替换策略——Replacement Policies
  • 嵌入式Qt Qt中的字符串类
  • 函数高级(C++)
  • jmeter-10调试取样器
  • C#,二进制数的按位旋转(Bits Rotate)算法与源代码
  • 解决ubuntu登录密码问题