React
版本
项目
创建
npm init vite 项目名称
依赖
npm i axios
npm i antd --save
npm i @ant-design/icons
npm i react-router-dom npm i sass -D
npm i vite-plugin-html -D
环境区分
"scripts" : {"dev": "vite --mode test","dev1": "vite --mode production","build": "vite build --mode test","build1": "vite build --mode production"
}
NODE_ENV = "test"
VITE_APP_TITLE = "测试"
VITE_APP_BASE_API = "test"
NODE_ENV = "production"
VITE_APP_TITLE = "生产"
VITE_APP_BASE_API = "production"
import { defineConfig,loadEnv } from 'vite'
import react from '@vitejs/plugin-react'
import { createHtmlPlugin } from "vite-plugin-html";
import { resolve } from "path";
export default defineConfig(({ mode, command }) =>{const env = loadEnv(mode, process.cwd(), ""); return {plugins: [react(),createHtmlPlugin({inject: {data: {title: env.VITE_APP_TITLE,},},}),],resolve: {alias: {"@": resolve(__dirname, "src"), },},base: "./", server: {port: 4000, open: true, cors: true, },};
})
<title><%= title %></title>
axios
import axios from "axios";let service = axios.create({baseURL:import.meta.env.VITE_APP_BASE_API,timeout: 100000, headers: {"Content-Type": "application/json;charset=UTF-8",},
});
service.interceptors.request.use(function (config) {let token = localStorage.getItem("token");if (token) {config.headers.authorization = token;}return config;},function (error) {return Promise.reject(error);}
);
service.interceptors.response.use(function (response) {return response.data;},function (error) {return Promise.reject(error);}
);export default service;
import request from "./index";export async function Ceshi(params) {return request({url: "/topics",method: "GET",params,});}export async function Ceshi2(data) {return request({url: "/Storage/GetStorageLack",method: "POST",data,});}
import {useEffect, useRef } from "react";
import { Ceshi } from "@/http/api.js";
function App() {const cache = useRef(null);useEffect(() => {async function fetchData() {cache.current = true;const response = await Ceshi();console.log(response);}if (!cache.current) {fetchData();}}, []);return (<></>);
}
antd
import { Button } from "antd";<><Button type="primary">Button</Button>
</>
sass
.ddd{.adsspan{color: aqua;}
}
router
import { HashRouter } from "react-router-dom";
<HashRouter><App></App></HashRouter>
import { useRoutes,useNavigate } from "react-router-dom";const navigate = useNavigate()
const GetRoutes = () => {const routes = useRoutes([{path: "/",element: <Home></Home>,},{path: "/b",element: <B></B>,children: [{path: "/b/aaaa", element: <C></C> ,},],},{path: "/*",exact: true,element: <div>后台404</div>,},]);return routes;
};
<GetRoutes /><Button type="primary" onClick={()=> navigate('/b/aaaa')}>Button</Button>
<Outlet></Outlet>