React + Ts + Vite + Antd 项目搭建

news2025/4/8 8:47:05

1、创建项目

npm create vite 项目名称

选择 react

选择 typescript

关闭严格模式

建议关闭严格模式,因为不能自动检测副作用,有意双重调用。将严格模式注释即可。

 2、配置sass

npm install sass

更换所有后缀css为sass

vite.config.ts中注册全局样式

// 配置Scss

  css: {

    preprocessorOptions: {

      scss: {

        additionalData: `@import "./src/styles/sassConfig";`,

      },

    },

  },

3、配置路径别名 

安装path      npm i @types/node --save-dev 

在 vite.config.ts 中引入path,并声明快捷字符及其对应文件夹,这里以@表示src目录为例,代码如下:

import { resolve } from "path"

// 配置路径别名

  resolve: {

    alias: {

      "@": resolve(__dirname, "src"),

    },

  },

tsconfig.json,注意:这里的字符与目录一定要与vite.config.ts中的配置保持一致。 

{
  "compilerOptions": {
    "target": "ES2020",
    "useDefineForClassFields": true,
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "module": "ESNext",
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true,

    // 路径别名
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    }
  },
  "include": ["src"],
  "references": [{ "path": "./tsconfig.node.json" }]
}

 添加后,再次输入@后,编译器会读取src目录下的资源。

4、配置axios请求

(1)下载axios及类型声明文件

npm install axios @types/axios

(2)根据需求封装axios 

// 在项目中创建一个 axios.js 文件

import axios from 'axios';
const instance = axios.create({
    baseURL: 'http://api.example.com', // 你的 API 地址
    timeout: 5000, // 请求超时时间(毫秒)
    headers: {
        'Content-Type': 'application/json', // 设置请求头,根据实际情况修改
    }
});
// 请求拦截器
instance.interceptors.request.use(
    config => {
        // 在发送请求之前做些什么,比如添加 token 等
        return config;
    },
    error => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

// 响应拦截器
instance.interceptors.response.use(
    response => {
        // 对响应数据做点什么
        return response.data;
    },
    error => {
        // 对响应错误做点什么
        return Promise.reject(error);
    }
);

export default instance;

(3)解决跨域

在项目根目录下创建三个文件,分别对应全局环境、开发环境、生产环境。

vite.config.ts中配置跨域

import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react'
import { resolve } from "path"
export default defineConfig(({ mode }) => {
  const config = loadEnv(mode, "./")
  return {
    plugins: [react()],
    // 配置Scss
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@import "./src/styles/sassConfig";`,
        },
      },
    },
    // 配置路径别名
    resolve: {
      alias: {
        "@": resolve(__dirname, "src"),
      },
    },
    // 配置跨域
    server: {
      port: 8888,
      host: "192.168.31.207",
      proxy: {
        "/api": {
          target: config.VITE_TARGET,  // 会自动判断当前环境,对应上述三个文件中的target
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/api/, ""),
        },
      },
    }
  }
})

5、配置Antd

安装:npm install antd --save

下载icon:npm install @ant-design/icons --save

国际化

下载完毕后,默认语言为英文,需要在main.ts中注入并配置antd

import ReactDOM from "react-dom/client"
import App from "./App.tsx"
import "./index.scss"
// antd部分
import { ConfigProvider } from "antd"
import "dayjs/locale/zh-cn"
import zhCN from "antd/locale/zh_CN"

ReactDOM.createRoot(document.getElementById("root")!).render(
   <ConfigProvider locale={zhCN}>
     <App />
   </ConfigProvider>
)

6、配置路由

安装 npm i react-router-dom@6

(1)在src文件目录下创建router文件夹 

import type { RouteObject, } from 'react-router-dom';
import { Navigate } from "react-router-dom";
import { lazy } from 'react';

const Home = lazy(() => import('@/pages/Home'));
const NotFound = lazy(() => import('@/pages/NotFound'));//使用路由懒加载优化提升

const routes: RouteObject[] = [
    {
        path: "/",
        element: <Navigate to="/home" />,
    },
    {
        path: '/404',
        element: <NotFound />,
    },
    {
        path: '/home',
        element: <Home />,

        // children: [
        //     {
        //         index : true,
        //         element: <Home />
        //     },
        //     {
        //         path: "/about",
        //         element: <About />,
        //         children: [
        //             { index : true, element: <AboutIndex />},
        //             { path : "/about/:id", element :<AboutList />}
        //         ]
        //     },
        //     {
        //         path: "/bussiness",
        //         element: <Bussiness />,
        //     }
        // ]
    },
];

export default routes;

(2)在scr/App.tsx文件中加入

 
import React from 'react';
import './App.css';
import { useRoutes } from 'react-router';
import routes from './route';
 
function App() {
  return (
    <div className="App">
      {useRoutes(routes)}
    </div>
  );
}
 
export default App;

(3)在scr/main.tsx文件中配置路由模式

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import './index.css';
import { BrowserRouter } from 'react-router-dom';
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
  <React.StrictMode>
  <BrowserRouter>
      <App />
      </BrowserRouter>
  </React.StrictMode>
);

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

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

相关文章

【中级软件设计师】上午题08-UML(下):序列图、通信图、状态图、活动图、构件图、部署图

上午题08-UML 1 序列图2 通信图3 状态图3.1 状态和活动3.2 转换和事件 4 活动图5 构件图&#xff08;组件图&#xff09;6 部署图 UML图总和 静态建模&#xff1a;类图、对象图、用例图 动态建模&#xff1a;序列图&#xff08;顺序图&#xff0c;时序图&#xff09;、通信图&a…

vue:如何通过两个点的经纬度进行距离的计算(很简单)

首先假设从api获取到了自己的纬经度和别人的纬经度 首先有一个概念需要说一下 地球半径 由于地球不是一个完美的球体&#xff0c;所以并不能用一个特别准确的值来表示地球的实际半径&#xff0c;不过由于地球的形状很接近球体&#xff0c;用[6357km] 到 [6378km]的范围值可以…

Python-VBA函数之旅-eval函数

目录 一、eval函数的常见应用场景&#xff1a; 二、eval函数安全使用注意事项&#xff1a; 三、eval函数与exec函数对比分析&#xff1a; 1、eval函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、相关文章&#xff1a; 个人主页&#xff1a;ht…

计算机考研408真的很难吗?

408难&#xff01;科软有人四战没上岸&#xff0c;就是408拖的后腿&#xff01; 这位同学数二144英二81&#xff0c;真的太可惜了&#xff01; 是因为择校的问题吗&#xff1f; 看了他的备战经历后&#xff0c;我们发现&#xff0c;还真不是择校问题&#xff01; 是典型的备…

13个Java基础面试题

Hi&#xff0c;大家好&#xff0c;我是王二蛋。 金三银四求职季&#xff0c;特地为大家整理出13个 Java 基础面试题&#xff0c;希望能为正在准备或即将参与面试的小伙伴们提供些许帮助。 后续还会整理关于线程、IO、JUC等Java相关面试题&#xff0c;敬请各位持续关注。 这1…

9. 性能

文章目录 第9章 性能9.1 性能通用场景9.2 性能策略控制资源需求管理资源 9.3 基于策略的性能的问卷9.4 性能模式服务网格负载均衡限流Map-Reduce 9.5 扩展阅读9.6 问题讨论 第9章 性能 身行一例&#xff0c;胜似千言。 —Mae West 这是跟时间有关的。 性能&#xff0c;即&…

JavaWeb--前端--01HTML和CSS

文章目录 1 前端开发介绍2 开发工具3 文档查阅4 CSS选择器VSCode的插件 点击进入:W3School的HTML文档 点击进入:W3School的CSS文档 内容就在这两个网站里面 1 前端开发介绍 Web标准也称为网页标准&#xff0c;由一系列的标准组成&#xff0c;大部分由W3C&#xff08; World W…

ArcGIS加载的各类地图怎么去除服务署名水印

昨天介绍的&#xff1a; 一套图源搞定&#xff01;清新规划底图、影像图、境界、海洋、地形阴影图、导航图-CSDN博客文章浏览阅读373次&#xff0c;点赞7次&#xff0c;收藏11次。一体化集成在一起的各类型图源&#xff0c;比如包括影像、清新的出图底图、地形、地图阴影、道路…

定制k8s域名解析------CoreDns配置实验

定制k8s域名解析------CoreDns配置实验 1. 需求 k8s集群内通过CoreDns互相解析service名. 同时pana.cn域为外部dns解析,需要通过指定dns服务器进行解析 再有3个服务器,需要使用A记录进行解析 2. K8s外DNS服务器 查看解析文件 tail -3 /var/named/pana.cn.zone 解析内容 ww…

error: failed to push some refs to ‘https://gitee.com/zhao-zhimin12/gk.git‘

git push origin master发现以下报错: 解决办法: 一、强制推送 git push origin master -f &#xff08;加上 -f 就是强制&#xff09; 二、 先拉取最新代码&#xff0c;再推送 1.git pull origin master 2.git push origin master

11.基础乐理-音域、1=C到底是那一组的C

音域&#xff1a; 音域它指的是一个乐器&#xff08;包括人声&#xff09;&#xff0c;能发出的所有的音高总&#xff0c;比如我们拿钢琴来看&#xff0c;钢琴最低的是大字二组的A2&#xff0c; 钢琴最高音是小字五组的c5&#xff0c;钢琴的音域是A2 - c5&#xff0c;如图1所示…

接口测试——postman

一.下载与安装 https://www.getPostman.com/ 界面导航说明 二.get请求 第一个get请求 批量执行接口请求&#xff1a; 1. 右击run collection 2. 会出现runner标签页 携带参数的GET请求 所谓的查询参数&#xff0c;其实就是URL地址中问号&#xff08;?&#xff09;后面的部分…

解决这个设备,搞安防网络不再踩坑!

中午好&#xff0c;我的网工朋友。 随着安全防护领域从模拟技术向IP技术的转型&#xff0c;网络在安防的应用越来越重要&#xff0c;也越来越复杂。 从业多年&#xff0c;我观察到许多行业同仁在技术实践中走了弯路&#xff0c;无论是安防厂商、集成商还是最终用户&#xff0…

C语言 | Leetcode C语言题解之第25题K个一组翻转链表

题目&#xff1a; 题解&#xff1a; /* 定义保存两个地址的结构体* 用来保存反转后结果的头节点和尾节点*/ typedef struct {struct ListNode* head; struct ListNode* tail; } TwoAddress; // 反转中间链表 TwoAddress* reverse(struct ListNode* head){struct ListNode* pr…

7 种实现 CSS 三角形的原理与方法 以及 三角形在网页设计中的作用

三角形在网页设计中不仅是图形设计的基本元素&#xff0c;更是实现视觉引导、空间构建、情绪传达、品牌塑造、性能优化以及创新表达的重要工具。其广泛应用和多功能性使其成为设计师手中不可或缺的设计语言组成部分。本文介绍了7种CSS实现三角形的方法。 CSS实现三角形主要有以…

基于java+springboot+vue实现的健身俱乐部系统(文末源码+Lw+ppt)23-49

摘 要 随着社会的发展&#xff0c;健身俱乐部的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;健身信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得本健身俱乐部管理信息&#xff0c;因此&#xff0c;设计一种安全高效的健身俱乐部网…

护眼大路灯十大排名品牌有哪些?护眼落地灯排行榜新鲜出炉!

作为一位电器测评博主&#xff0c;我的后台总会有人不断询问关于大路灯的问题。我大概汇总了一下&#xff0c;常见的就是护眼大路灯哪款好&#xff0c;护眼大路灯十大排名品牌有哪些等等&#xff0c;这些问题的存在主要是因为市面上存在着众多的大路灯品牌&#xff0c;质量参差…

【LeetCode刷题记录】54. 螺旋矩阵

54 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&#xf…

目标检测——食品饮料数据集

一、重要性及意义 对食品和饮料进行目标检测的重要性和意义体现在多个方面&#xff1a; 商业应用与市场分析&#xff1a;目标检测技术在食品和饮料行业有着广泛的应用前景。通过对超市货架、餐馆菜单或广告海报中的食品和饮料进行自动识别和计数&#xff0c;商家可以获取关于产…

MongoDB的安装配置及使用

文章目录 前言一、MongoDB的下载、安装、配置二、检验MongoDB是否安装成功三、Navicat 操作MongoDB四、创建一个集合&#xff0c;存放三个文档总结 前言 本文内容&#xff1a; &#x1f4ab; MongoDB的下载、安装、配置 &#x1f4ab; 检验MongoDB是否安装成功 ❤️ Navicat 操…