一、环境搭建与工程配置
1.1 现代脚手架选择
npx create-react-app my-app --template typescript
npm create vite@latest my-react-app -- --template react-ts
配置差异对比:
特性
CRA
Vite
启动速度
15-30s
<1s
热更新
全量刷新
按需HMR
构建输出
单一bundle
原生ESM
配置自由度
eject后修改
开箱即配置
1.2 必要依赖配置
export default defineConfig ( {
plugins : [ react ( ) ] ,
resolve : {
alias : {
'@' : path. resolve ( __dirname, './src' )
}
} ,
build : {
rollupOptions : {
output : {
manualChunks : {
vendor : [ 'react' , 'react-dom' ] ,
libs : [ 'lodash-es' , 'dayjs' ]
}
}
}
}
} )
1.3 代码规范体系
{
"extends" : [
"plugin:react/recommended" ,
"airbnb" ,
"airbnb-typescript"
] ,
"rules" : {
"react/jsx-uses-react" : "off" ,
"react/react-in-jsx-scope" : "off" ,
"jsx-a11y/anchor-is-valid" : "off"
}
}
二、核心概念深度解析
2.1 JSX本质原理
const element = < h1 className= "title" > Hello< / h1> ;
const element = React. createElement (
"h1" ,
{
className : "title" } ,
"Hello"
) ;
设计原则:
语法糖:JavaScript的XML扩展
表达力:模板语法+编程能力结合
安全性:自动转义防XSS
2.2 组件设计模式
2.2.1 容器/展示组件模式
const UserContainer = ( ) => {
const [ users, setUsers] = useState < User[ ] > ( [ ] ) ;
useEffect ( ( ) => {
fetchUsers ( ) . then ( data => setUsers ( data) ) ;
} , [ ] ) ;
return < UserList data= {
users} / > ;
}
const UserList = ( {
data } : {
data: User[ ] } ) => (
< ul>
{
data. map ( user => (
< li key= {
user. id} > {
user. name