# vite-react-template
**Repository Path**: liuyangong/vite-react-template
## Basic Information
- **Project Name**: vite-react-template
- **Description**: vite + react 构建模版
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-11-01
- **Last Updated**: 2022-11-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 环境
```
node
16.17.1
npm
8.15.0
```
Ant Design of React 官网 https://pro.ant.design/zh-CN/docs/overview
# 一、创建项目
```
npm init vite
```

打开 package.json 添加
```
"scripts": {
"dev": "vite --host --port 8888 --open", // 定义端口号,自动打开
"build": "tsc && vite build",
"preview": "vite preview"
},
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-redux": "^8.0.4",
"react-router-dom":"^6.4.2",
"redux":"^4.2.0"
},
```
安装 npm i
# 二、项目目录初始化
删除不需要的页面、css
# 三、样式初始化
使用 reset-css,更简洁, 比 Normalize 更适合企业使用
```
npm i rest-css
```
在 main.tsx 中应用
```
import React from 'react'
import ReactDOM from 'react-dom/client'
import 'rest-css'
import App from './App'
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
)
```
# 四、scss 安装
```
npm i --save-dev sass
```
```
$color: #fcf;
body {
user-select: none;
background-color: $color;
}
img{
-webkit-user-drag: none;
}
```
# 五、配置项目路径别名
### 5.1 路径别名
在 vite.config.ts 中
```
resolve: {
alias:{
'@': path.resolve(__dirname, './src')
}
}
```
这个时候 path 会报错, 需要安装
```
npm i -D @types/node
```
### 5.2 路径别名提示
在 tsconfig.json 中添加配置
```
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
```
然后重启 vscode
# 六、样式模块化
名称命名为 xxx.module.scss
```
import styles from '@/assets/styles/app.module.scss'
Hello world
```
# 七、Ant Design 安装
## 1. 安装
```
npm install antd --save
```
安装图标所需要的模块
```
npm install --save @ant-design/icons
```
在 app 组件中引入即可使用
```
import {Button} from 'antd'
import 'antd/dist/antd.css' // 全部组件的样式全部引入了
```
## 2. 按需引入
antd4 以上支持按需引入
```
npm install vite-plugin-style-import@1.4.1 -D
```
配置 vite.config.ts 的 plugin 中添加
```
import styleImport, {AntdResolve} from 'vite-plugin-style-import'
plugins: [
react(),
styleImport({
resolves:[
AntdResolve()
]
})
],
```
重新启动会发现报错
```
Preprocessor dependency "less" not found. Did you install it? (x2)
00:27:05 [vite] Internal server error: Preprocessor dependency "less" not found. Did you install it?
Plugin: vite:css
File: /Users/xueyan/Desktop/project/vite-react-template/node_modules/antd/es/style/default.less?v=134c57c1
at loadPreprocessor (file:///Users/xueyan/Desktop/project/vite-react-template/node_modules/vite/dist/node/chunks/dep-c842e491.js:45364:19)
at less (file:///Users/xueyan/Desktop/project/vite-react-template/node_modules/vite/dist/node/chunks/dep-c842e491.js:45497:22)
at compileCSS (file:///Users/xueyan/Desktop/project/vite-react-template/node_modules/vite/dist/node/chunks/dep-c842e491.js:44926:40)
at async TransformContext.transform (file:///Users/xueyan/Desktop/project/vite-react-template/node_modules/vite/dist/node/chunks/dep-c842e491.js:44494:55)
at async Object.transform (file:///Users/xueyan/Desktop/project/vite-react-template/node_modules/vite/dist/node/chunks/dep-c842e491.js:41421:30)
at async loadAndTransform (file:///Users/xueyan/Desktop/project/vite-react-template/node_modules/vite/dist/node/chunks/dep-c842e491.js:37808:29)
00:27:05 [vite] Internal server error: Preprocessor dependency "less" not found. Did you install it?
```
执行
```
npm i less@4.1.3 -D
```
### 2.0.0 版本 更换了方法,需要安装
https://github.com/vbenjs/vite-plugin-style-import
```
npm install vite-plugin-style-import@2.0.0 -D
npm i consola -D
```
```
import { createStyleImportPlugin, VantResolve } from 'vite-plugin-style-import';
createStyleImportPlugin({
resolves:[
VantResolve()
]
})
```
# 九、React 路由设置
```
npm i react-router-dom
```
## 1.旧版本
创建 router.tsx
```
const baseRoute = () => (
}>
}>
}>
)
export default baseRoute
```
在 mian 文件中显示
```
import Router from './router/index-old'
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
)
```
## 2.新版本
```
// 对象的写法
import Home from '@/pages/index/Index'
import Mine from '@/pages/mine/Index'
//Navigate重定向组件
import { Navigate } from 'react-router-dom'
const routes = [
{
path: '/',
element: ()
},
{
path: '/home',
element:
},
{
path: '/mine',
element:
}
]
export default routes
```
main 文件
```
import { HashRouter } from 'react-router-dom'
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
)
```
在 App 文件中,使用 useRoutes
```
import { useRoutes } from 'react-router-dom'
import Router1 from './router/index'
function App() {
const outlet = useRoutes(Router1)
return (
{outlet}
)
}
export default App
```
## 3.路由懒加载
使用 lazy
```
const Mine = lazy(()=>(
import ('@/pages/mine/Index')
))
```
// 懒加载的模式,需要添加一个 loadding 组件
```
{
path: '/mine',
element: Loadding}>
}
```
# 十、侧边栏设置
1. 展开、搜索
2. 菜单的设置。MainMenu
```
defaultSelectedKeys;设置为currentRoute.pathname
```
# 十一、登录页面设置
Login
# 状态管理
1. 安装
npm i redux react-redux --save
```
const store = legacy_createStore(reducer)
```
为了浏览器能使用 redux-dev-tools
window.__REDUX_DEVTOOLS_EXTENSION__ && __REDUX_DEVTOOLS_EXTENSION__()
# 2. 异步操作
市面上有 redux-saga、 redux-thunk, redux-promise等
```
npm i redux-thunk
```
在store 中
```
import reduxThunk from "redux-thunk"
```
store 中
```
const store = legacy_createStore(reducers,composeEnhancers(applyMiddleware(reduxThunk)));
```
# 十二 axios封装和api抽取
1. 安装
```
npm i axios
```
2. 使用jsontots插件
shift + control + option + v
3. 登录路由拦截
在app.tsx中做判断 BeforeRouterEnter