Skip to content

React 学习与实战

一、核心能力目标

  1. 理解 React 的渲染心智模型。
  2. 熟练掌握 Hooks 与状态管理。
  3. 能写出稳定、可测试、可扩展的中大型页面。

二、React 核心概念

1. 单向数据流

  • 状态提升。
  • 父子通信清晰可追踪。

2. 组件渲染

  • state/props 变化触发重新渲染。
  • 减少无意义重渲染是性能关键。

3. Hooks 规则

  1. 只能在组件顶层调用。
  2. 只能在 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。
  • 示例:usePaginationusePermissionuseRequest

四、状态管理建议

  1. 小型应用:useState + Context
  2. 中大型应用:Zustand/Redux Toolkit。
  3. 服务端状态推荐 React Query/TanStack Query。

五、性能优化

  1. React.memo:避免子组件重复渲染。
  2. useMemo/useCallback:缓存计算与函数引用。
  3. 列表 key 稳定,不要滥用索引。
  4. 路由级别代码分割(lazy + Suspense)。

六、常见问题

  1. useEffect 依赖不完整导致脏数据。
  2. 闭包陷阱导致读取旧状态。
  3. 组件内直接发请求缺少取消机制。

七、面试高频

  1. useEffectuseLayoutEffect 区别。
  2. React Fiber 的价值。
  3. 为什么 key 不能乱写。
  4. 受控组件与非受控组件。

八、进阶方向

  1. React Server Components 心智。
  2. 设计系统与组件库建设。
  3. 结合 Next.js 做全栈应用。

Released under the MIT License.