配置Vite+React+TS项目

这篇具有很好参考价值的文章主要介绍了配置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文件,不然你使用路径别名引入组件的时候会报错,没写baseUrl vite会warning:

{
  "compilerOptions": {
    "baseUrl": "./",
    /* 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:文章来源地址https://www.toymoban.com/news/detail-834180.html

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 该值需设为true
  withCredentials: 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});
      break
    case '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 };

到了这里,关于配置Vite+React+TS项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 搭建React项目,基于Vite+React+TS+ESLint+Prettier+Husky+Commitlint

    node: 20.10.0 安装包管理器pnpm 基于Vite创建项目 进入项目目录安装依赖 启动项目 1、初始化ESLint 按下图结果进行初始化选择: 按需选择完配置后,选择立即安装,就可一键安装相关依赖。安装成功后 ESLint 帮我们创建了 .eslintrc.cjs 配置文件(cjs 是指 CommonJS 格式)。 2、在项目

    2024年02月04日
    浏览(65)
  • 使用vite创建Vue/React前端项目,配置@别名和Sass样式,又快又方便

    Vite官方网站:Vite | 下一代的前端工具链  Vite 并不是基于 Webpack 的,它有自己的开发服务器,利用浏览器中的原生 ES 模块。这种架构使得 Vite 比 Webpack 的开发服务器快了好几个数量级。Vite 采用 Rollup 进行构建,速度也更快。  兼容性注意 Vite 需要 Node.js 版本 14.18+,16+。然

    2024年02月14日
    浏览(53)
  • 【React】TS项目配置Redux

    在React中使用Redux,官方要求安装两个插件, Redux Toolkit 和 react-redux Redux Toolkit (RTK): 官方推荐编写Redux逻辑的方式,是一套工具的集合集, 简化书写方式 。 简化 store 的配置方式 内置 immer 支持可变式状态修改 内置 thunk 更好的异步创建 react-redux :用来 链接 Redux 和 React组

    2024年01月22日
    浏览(37)
  • 【实战】 TS 应用:JS神助攻 - 强类型 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(三)

    学习内容来源:React + React Hook + TS 最佳实践-慕课网 相对原教程,我在学习开始时(2023.03)采用的是当前最新版本: 项 版本 react react-dom ^18.2.0 react-router react-router-dom ^6.11.2 antd ^4.24.8 @commitlint/cli @commitlint/config-conventional ^17.4.4 eslint-config-prettier ^8.6.0 husky ^8.0.3 lint-staged ^13.1.2 p

    2024年02月09日
    浏览(48)
  • 【实战】三、TS 应用:JS神助攻 - 强类型 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(三)

    学习内容来源:React + React Hook + TS 最佳实践-慕课网 相对原教程,我在学习开始时(2023.03)采用的是当前最新版本: 项 版本 react react-dom ^18.2.0 react-router react-router-dom ^6.11.2 antd ^4.24.8 @commitlint/cli @commitlint/config-conventional ^17.4.4 eslint-config-prettier ^8.6.0 husky ^8.0.3 lint-staged ^13.1.2 p

    2024年02月11日
    浏览(55)
  • react+ts【项目实战一】配置项目/路由/redux

    1、该项目使用的是ts创建的 所以需要加上 --template typescript create-react-app kiki_ts_react_music --template typescript 2、 整理项目结构 删除一些自己用不到的文件 1.2.1 更换icon 1.2.2 更换项目名称 在index.html文件里面 1.2.1 配置项目别名 1、 npm i -D @craco/craco 2、在根文件创建 craco.config.ts 3、修

    2024年02月19日
    浏览(45)
  • React18TS项目:配置react-css-modules,使用styleName

    他的好处不说了 网上一堆文章一个能打的都没有, 添加开发依赖 Babel Plugin \\\"React CSS Modules\\\" | Dr. Pogodin Studio 看@dr.pogodin/babel-plugin-react-css-modules官方文档 不使用babel-plugin-react-css-modules 手搭webpack配置需要处理 1.能启用css modules 对于裸 Webpack,请参见webpack css-loader的 modules 的选项

    2024年02月12日
    浏览(48)
  • React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint

    我的项目版本如下: React: V18.2.0 Node.js: V16.14.0 TypeScript:最新版 工具: VsCode 本文将采用图文详解的方式,手把手带你快速完成在React项目中配置husky、prettier、commitLint,实现编码规范的统一,git提交规范的统一。 1.1 装包 1.2 ESLint 插件安装 1.3 创建命令并使用 新增命令 执行

    2024年02月08日
    浏览(56)
  • 【实战】 项目起航:项目初始化与配置 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(一)

    学习内容来源:React + React Hook + TS 最佳实践-慕课网 相对原教程,我在学习开始时(2023.03)采用的是当前最新版本: 项 版本 react react-dom ^18.2.0 react-router react-router-dom ^6.11.2 antd ^4.24.8 @commitlint/cli @commitlint/config-conventional ^17.4.4 eslint-config-prettier ^8.6.0 husky ^8.0.3 lint-staged ^13.1.2 p

    2024年02月10日
    浏览(78)
  • react+vue 前端国密算法sm2、sm3 、sm4的js ts实现

    1. 简单介绍下SM2 和 SM3 SM2 算法:是一种公钥加密算法,它的密钥长度为 256 位,安全性较高。可用于数字签名、密钥协商等场景。 SM3 算法:是一种对称加密算法,用于消息摘要和数字签名等场景。它的密钥长度为 256 位,安全性较高。SM3 算法与 SM2 算法相互配合,提高了整体

    2024年01月19日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包