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 架构、解决复杂性能问题"的层次了。

相关推荐
剪刀石头布啊1 分钟前
ahooks常用的一些库,我们使用一下
前端
剪刀石头布啊3 分钟前
从git更新本地提交记录到更新已经推送到远端记录
前端
Flynt2 小时前
axios 被投毒半年后,我把 npm 的"安全防线"实测了一遍:最信任的 SHA512 是安慰剂
前端·npm·node.js
excel3 小时前
Base62 和 Base64 有什么区别?
前端
风骏时光牛马4 小时前
大模型底层架构与AI源码深度剖析
前端
掘金挖土5 小时前
前端手摸手跑路之 AI 应用开发(九)
前端·后端
中文呀7 小时前
三维 GIS 离线缓存实战:逆向 CesiumOfflineCache,并亲手为它补上"自动更新"能力
前端
前进前进前进8 小时前
TRAE 全链路实战:做了一个警示牌一键生成器:纯 Canvas、单文件、零依赖
前端
小万7429 小时前
God‘s Eye View 深度解析:15 路公开信号 + CesiumJS 的浏览器级 OSINT 控制台,60 帧渲染的“真实间谍卫星模拟器”
前端