术语图鉴/前端基础/虚拟 DOM
←→切换Esc返回

虚拟 DOM Virtual DOM

你可能会说

每次状态变化都重新渲染整个页面,不会很慢吗?

虚拟 DOM 是真实 DOM 的内存镜像——React 先在虚拟 DOM 上 Diff,再最小化更新真实 DOM,避免全量重绘。

React 在内存中维护一份页面的「副本」。数据变化时先对比副本找出差异,再只更新真正变了的 DOM 节点,比全量刷新快得多。

也常被叫作Virtual DOM

生活类比

像改作文时先复印一份,在复印件上标出要改的地方,最后只改标出来的几处,不用重抄全文。

🎮 动手试试

👇 修改列表观察 Diff 结果

A
B
C
选择题选择一个你认为最合适的答案

关于「虚拟 DOM」,以下哪个描述最准确?

你可以这样告诉 AI

帮我优化列表渲染性能:用 key 帮助 React 识别哪些项变了,避免不必要的重渲染,大列表用虚拟化。

容易混淆?这样区分

虚拟 DOM Virtual DOM≠
真实 DOM Real DOM

真实 DOM 操作很慢(触发重排),虚拟 DOM 在内存中计算差异后批量更新。

虚拟 DOM Virtual DOM≠
Shadow DOM Shadow DOM

Shadow DOM 是浏览器原生的样式隔离机制(Web Components),和 React 虚拟 DOM 无关。

什么时候用

理解 React 性能

了解虚拟 DOM 的 Diff 机制能帮你写出更高效的代码:用 key 帮 React 识别变化,避免不必要的重渲染。

和 AI 协作时

想让 AI 优化列表时,直接说「每个列表项加唯一 key,避免用 index 做 key,大列表用虚拟滚动」。

什么时候不用

性能敏感场景

高频更新的可视化(如实时图表、游戏)虚拟 DOM 的 Diff 开销反而拖后腿,直接用 Canvas 或 WebGL。

与 React 无关的项目

用 Vue、Svelte、原生 JS 的项目各有自己的更新机制,不需要关心 React 虚拟 DOM。

组成结构 · Anatomy

1
核心概念Core

React 在内存中维护一份页面的「副本」。数据变化时先对比副本找出差异,再只更新真正变了的 DOM

2
实际表现In Practice

像改作文时先复印一份,在复印件上标出要改的地方,最后只改标出来的几处,不用重抄全文。

3
与 AI 的关联AI Context

和 AI 沟通时提到「用虚拟 DOM 高效更新」,就是让它不要每次重画整个页面。

典型使用场景

列表渲染优化
告诉 AI「我的长列表每次只改一项就全量重渲染,帮我用 key 优化:每项用唯一 id 做 key,配合 React.memo 避免不必要的 Diff」
想弄懂概念时
告诉 AI「用大白话给我解释什么是虚拟 DOM,举个生活中的例子」

延伸阅读