react 原理与进阶

如果你已经有 7 年前端经验,并且做过 React 项目,那么学习 React 不应该停留在:

复制代码
useState
useEffect
useMemo
useCallback

而是应该深入到 React 原理 + 源码 + 性能优化 + 架构设计


React 进阶学习路线

第一阶段:React 核心原理

1. JSX 本质

很多人写:

javascript 复制代码
const App = () => {
  return <h1>Hello React</h1>;
}

实际上经过编译:

javascript 复制代码
import { jsx } from "react/jsx-runtime";

const App = () => {
  return jsx("h1", {
    children: "Hello React"
  });
};

React 最终创建的是:

css 复制代码
{
  type: "h1",
  props: {
    children: "Hello React"
  }
}

即:

复制代码
JSX
↓
ReactElement
↓
Virtual DOM
↓
真实DOM

2. Virtual DOM

理解:

复制代码
真实DOM
↓
Virtual DOM
↓
Diff算法
↓
Patch更新

例如:

css 复制代码
<div>1</div>

变成:

css 复制代码
<div>2</div>

React 不会销毁整个 DOM。

只会更新:

复制代码
textContent

3. Fiber 架构(重点)

React16 以后最大的升级。

以前:

复制代码
Render
↓
一次性执行
↓
页面阻塞

现在:

php 复制代码
Fiber Tree
↓
可中断
↓
可恢复
↓
可调度

本质:

复制代码
FiberNode

结构类似:

bash 复制代码
{
  type,
  stateNode,
  child,
  sibling,
  return
}

形成:

复制代码
链表树

而不是传统递归树。


4. React 调度器 Scheduler

React18 核心。

优先级:

css 复制代码
Immediate
UserBlocking
Normal
Low
Idle

例如:

用户输入:

css 复制代码
<input />

优先级高。

图表渲染:

xml 复制代码
<Echarts />

优先级低。

React 会先保证输入流畅。


第二阶段:Hooks 原理


useState 原理

写:

scss 复制代码
const [count, setCount] = useState(0);

底层类似:

ini 复制代码
hook = {
  memoizedState: 0,
  queue: []
}

更新:

scss 复制代码
setCount(1)

进入:

arduino 复制代码
queue.push(1)

下次 render:

perl 复制代码
重新计算 state

为什么 Hooks 不能写在 if 中

错误:

scss 复制代码
if(flag){
  useState()
}

React 内部:

复制代码
hook1
hook2
hook3

依赖执行顺序。

顺序变化:

复制代码
hook错位

导致状态混乱。


useEffect 原理

执行流程:

sql 复制代码
Render
↓
Commit
↓
useEffect

所以:

javascript 复制代码
useEffect(()=>{
  console.log("effect")
})

一定晚于页面渲染。


第三阶段:React18 新特性


Concurrent Rendering

并发渲染。

scss 复制代码
startTransition(() => {
  setList(bigData)
})

低优先级任务:

复制代码
可暂停
可恢复

避免页面卡顿。


useTransition

scss 复制代码
const [pending, startTransition] = useTransition();

典型:

复制代码
搜索框

输入优先:

复制代码
用户输入
↓
立即更新

搜索结果:

复制代码
后台更新

useDeferredValue

ini 复制代码
const deferredKeyword =
  useDeferredValue(keyword);

适用于:

复制代码
搜索联想
大列表过滤

第四阶段:性能优化

这是面试高频。


React.memo

arduino 复制代码
export default React.memo(Component)

避免:

复制代码
父组件更新
↓
子组件重新渲染

useMemo

缓存计算结果:

scss 复制代码
const data = useMemo(() => {
  return heavyCalc()
}, [list])

useCallback

缓存函数:

ini 复制代码
const onClick = useCallback(() => {

}, [])

避免:

复制代码
子组件重复render

虚拟列表

例如:

复制代码
10000条数据

不要全部渲染。

推荐:

  • react-window
  • react-virtualized

第五阶段:源码必学模块

如果想达到高级前端水平:

建议研究:

React 源码目录

复制代码
react
react-dom
scheduler
reconciler

重点:

erlang 复制代码
FiberNode
beginWork
completeWork
commitRoot

第六阶段:企业级架构

你目前更应该学习:

状态管理

  • Redux Toolkit
  • Zustand
  • Jotai

服务端状态管理

  • TanStack Query

解决:

复制代码
缓存
重试
预加载
分页

React 全栈

路线:

vbnet 复制代码
React
↓
TypeScript
↓
Next.js
↓
Node.js / NestJS
↓
PostgreSQL
↓
Redis

这是 2026 年最主流的 React 技术栈。

推荐学习资源

官方文档

源码学习

书籍

  1. 深入浅出React和Redux
  2. React设计原理
  3. React技术揭秘(源码方向非常推荐)

对于你目前的经验阶段,最值得投入时间的顺序是:

php 复制代码
Fiber原理
↓
React18并发特性
↓
性能优化
↓
TanStack Query
↓
Next.js
↓
React源码

学完这些,基本就已经从"会写 React"进入到"能设计 React 架构、解决复杂性能问题"的层次了。

相关推荐
爱勇宝19 小时前
第 1 章:别把“需求文档”当成真正的需求
前端·后端·程序员
梨子同志20 小时前
常用命令
前端
梨子同志20 小时前
React 状态管理
前端
Dxy123931021621 小时前
MySQL索引完整教程:创建、查看、修改、删除与日常管理
前端·javascript·mysql
剪刀石头布啊21 小时前
js能被遍历的集合有哪些特征,为何能被遍历
前端
剪刀石头布啊21 小时前
js解构
前端
剪刀石头布啊21 小时前
防抖功能的逐步递进
前端
剪刀石头布啊21 小时前
对象的大小比较与面向对象思考
前端
最爱老式锅包肉1 天前
《HarmonyOS技术精讲-ArkWeb》桥接两岸:JSBridge原生与Web互调
前端·华为·harmonyos
IT_陈寒1 天前
闭包陷阱让我加了两天班,JavaScript你真行
前端·人工智能·后端