React 学习与实战
一、核心能力目标
- 理解 React 的渲染心智模型。
- 熟练掌握 Hooks 与状态管理。
- 能写出稳定、可测试、可扩展的中大型页面。
二、React 核心概念
1. 单向数据流
- 状态提升。
- 父子通信清晰可追踪。
2. 组件渲染
- state/props 变化触发重新渲染。
- 减少无意义重渲染是性能关键。
3. Hooks 规则
- 只能在组件顶层调用。
- 只能在 React 函数组件或自定义 Hook 内调用。
三、常用 Hooks 模式
1. 状态与副作用
tsx
import { useEffect, useState } from 'react'
export function Profile({ userId }: { userId: string }) {
const [data, setData] = useState<{ name: string } | null>(null)
useEffect(() => {
let canceled = false
fetch(`/api/users/${userId}`)
.then(r => r.json())
.then(res => {
if (!canceled) setData(res)
})
return () => {
canceled = true
}
}, [userId])
return <div>{data?.name ?? 'loading...'}</div>
}2. 自定义 Hook
- 复用业务逻辑,而不是复用 UI。
- 示例:
usePagination、usePermission、useRequest。
四、状态管理建议
- 小型应用:
useState + Context。 - 中大型应用:Zustand/Redux Toolkit。
- 服务端状态推荐 React Query/TanStack Query。
五、性能优化
React.memo:避免子组件重复渲染。useMemo/useCallback:缓存计算与函数引用。- 列表
key稳定,不要滥用索引。 - 路由级别代码分割(
lazy + Suspense)。
六、常见问题
useEffect依赖不完整导致脏数据。- 闭包陷阱导致读取旧状态。
- 组件内直接发请求缺少取消机制。
七、面试高频
useEffect与useLayoutEffect区别。- React Fiber 的价值。
- 为什么 key 不能乱写。
- 受控组件与非受控组件。
八、进阶方向
- React Server Components 心智。
- 设计系统与组件库建设。
- 结合 Next.js 做全栈应用。