一. 项目初始化
1. 创建项目
环境
npm init vite
打开package.json,参考以下各模块版本:
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-redux": "^7.2.8",
"react-router-dom": "^6.3.0",
"redux": "^4.1.2"
},
下载后进入到项目文件夹,安装package.json中的包:
npm i
尝试更改package.json启动命令:
"scripts": {
"dev": "vite --host --port 3002",
"build": "tsc && vite build",
"preview": "vite preview"
}
2. 项目目录初始化
删除掉官方自带而对我们暂时帮助不大的文件。删除src下除了main.tsx和App.tsx的其他文件;主文件/src/main.tsx修改成:
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
</React.StrictMode>
)
App.tsx文件修改成:
import { useState } from 'react'
function App() {
const [count, setCount] = useState(0)
return (
<div className="App">
顶级组件
</div>
)
}
export default App
3. 样式初始化
reset-css比Normalize.css更直接,干净利落去除默认样式,更适合在企业里的场景,所以用reset-css,而不用Normalize.css】
npm i reset-css
在src/main.tsx中引入reset-css:
import React from 'react'
import ReactDOM from 'react-dom/client'
import "reset-css"
import App from './App'
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
</React.StrictMode>
)
4. scss的安装和初步使用
安装sass vite中很方便,loader这些都不用自己配置,只需要安装好即可使用npm i --save-dev sass
src下新建assets/styles/global.scss:
$color:#eee;
body{
// 禁止选中文字
user-select:none;
background-color: $color;
}
img{
// 禁止拖动图片
-webkit-user-drag:none;
}
main.tsx中引入全局样式
import React from 'react'
import ReactDOM from 'react-dom/client'
import "reset-css"
import "./assets/styles/global.scss"
import App from './App'
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
</React.StrictMode>
)
5. 配置项目路径别名
// https://vitejs.dev/config/
import path from 'path'
export default defineConfig({
plugins: [react()],
resolve:{
alias:{
"@":path.resolve(__dirname,'./src')
}
}
})
这时候引入的会path模块报红,但其实我们已经有node,所以就已经有path模块,只是缺少ts的一些声明配置。所以需要安装关于node这个库的ts声明配置
npm i -D @types/node
安装成功就没有报红了,如果import后面的path报红,就把引入换成 import * as path from'path';
配置路径别名的提示
虽然现在路径别名已经有了,但是在文件中输入@是没有提示路径的需要我们在tsconfig.json中:添加两项配置
"compilerOptions": {
...
"baseUrl": "./",
"paths": {
"@/*": [
"src/*"
]
}
},
6. scss模块化
src下新建components文件夹,components文件夹下新建Comp1文件夹,新建index.tsx和comp1.scss
import "./comp1.scss"
function Comp() {
return (
<div className="box">
<p>这是Comp1里面的组件</p>
</div>
)
}
export default Comp
src/components/Comp1/comp1.scss中:
.box{
color:red
}
components文件夹下新建Comp2文件夹,新建index.tsx:
// !!!注意,在Comp2组件中不引入上面的comp1.scss样式
function Comp() {
return (
<div className="box">
<p>这是Comp2里面的组件</p>
</div>
)
}
export default Comp
在App.tsx中使用这两个组件:
import { useState } from 'react'
import Comp1 from "./components/Comp1"
impo