← 返回目录

第 2 卷

第 2 / 28 卷日期:

• 声明式编程(Declarative):开发者只需描述「UI 应该是什么样子」(基于状态),无需关心

• 组件化思想(Componentization):将复杂 UI 拆分为独立、可复用的组件,组件拥有自己的状

态和生命周期,支持组件嵌套组合,形成组件树,实现「高内聚、低耦合」的代码结构。

• 单向数据流(Unidirectional Data Flow):状态(State)只能从父组件传递给子组件(通过

Props),子组件不能直接修改父组件传递的 Props,若需修改状态,需通过父组件传递的回调函数触发,保证状态流向清晰、可追溯。

• 虚拟 DOM(Virtual DOM)与不可变状态(Immutability):

  1. 虚拟 DOM 是对真实 DOM 的轻量级描述,状态变化时,React 先对比虚拟 DOM 的差异(Diff

算法),再批量更新真实 DOM,减少 DOM 操作开销。

  1. 不可变状态:状态一旦创建就不能直接修改,需通过 setState(类组件)或 useState

(函数组件)返回的更新函数创建新状态,保证状态变化可追踪、便于实现时间旅行等功能。

2. React 与 Vue 的异同

(1)相同点

  1. 核心目标一致:都是用于构建用户界面的前端框架,解决原生 JavaScript 操作 DOM 繁琐、效率低

下的问题。

  1. 支持组件化:均以组件为核心构建单元,支持组件嵌套、复用,提高代码可维护性和复用性。
  2. 声明式编程:均采用声明式语法,开发者只需关注状态与 UI 的映射关系,无需手动操作 DOM。
  3. 虚拟 DOM:内部均实现了虚拟 DOM 机制,通过 Diff 算法减少真实 DOM 操作,提升渲染性能。
  4. 支持状态管理:均有对应的状态管理方案(React + Redux/MobX;Vue + Vuex/Pinia),解决复杂

应用的状态共享问题。

(2)不同点

对比维度ReactVue
核心语法基于 JSX 语法,将 HTML 嵌基于 SFC(单文件组件),
入 JavaScript 中(JS 优先)将 HTML、CSS、JS 分块编写

(HTML 优先),也支持 JSX

组件类型函数组件(React16.8 后推选项式组件(Vue2 推荐、荐)、类组件Vue3 兼容)、组合式组件

(Vue3 推荐,基于 <script setup>)

useState / useReducer式,可直接修改)

响应式原理无原生响应式,依赖状态更新Vue2:基于
函数Object.defineProperty
(setState/useState(无法监听数组下标、对象新
)触发重新渲染,React18 支增属性);Vue3:基于
持并发渲染Proxy(全方位监听对象/数

组变化,性能更优)

Diff 算法基于 Fiber 架构的可中断 Diff传统同步 Diff 算法
算法,按组件层级遍历,优先(Vue2/Vue3),Vue3 优化
级高的任务可中断低优先级任了静态节点标记,减少对比开
务销,无并发中断能力
生态体系生态庞大且灵活,配套工具丰生态完善且一体化,Vue 官方
富(React Router、Redux、提供全套解决方案(Vue
Next.js 等),更偏向Router、Vuex/Pinia、Vite、
「库」,需要开发者自行整合Nuxt.js 等),更偏向「框
方案架」,开箱即用
适用场景更适合大型、复杂的前端应用入门门槛低,更适合中小型应
(如电商后台、企业级系用、快速迭代项目,在国内中
统),在 React Native 移动小企业中普及率更高

端开发中优势明显

四、React 事件机制(与普通 DOM 事件的区别及工作原理)

1. 什么是 React 事件机制

React 事件机制是自定义事件系统(合成事件 SyntheticEvent),并非原生 DOM 事件的直接封装,而是 React 基于原生 DOM 事件封装的跨浏览器、统一规范的事件系统,解决了不同浏览器之间的事件

兼容问题,同时集成了 React 的核心特性(如批量更新、 Fiber 调度)。

2. React 合成事件与普通 DOM 事件的区别

对比维度React 合成事件普通 DOM 事件
事件绑定对象绑定在 React 组件的虚拟直接绑定在真实 DOM 元素上

DOM 上,最终会委托到 document 上(React17 后

事件对象合成事件对象原生 DOM 事件对象,不同浏(SyntheticEvent),兼容所览器存在兼容性差异

有浏览器,提供与原生事件对象一致的 API(如

target、 preventDefault)

事件冒泡合成事件冒泡:在 React 组件原生 DOM 事件冒泡:在真实树中冒泡,与原生 DOM 冒泡DOM 树中冒泡

独立,可通过 e.stopPropagation() 阻

止合成事件冒泡,但无法阻止原生事件冒泡(反之亦然)

事件解绑无需手动解绑(函数组件卸载需手动调用
后自动失效,类组件通过removeEventListener 解
this 绑定的事件在组件卸绑,否则可能导致内存泄漏

载时需手动清理,或使用箭头函数避免内存泄漏)

批量更新支持合成事件回调中触发的原生 DOM 事件回调中触发
setState 会进行批量更的 setState(React17
新,优化性能前)不支持批量更新,

React18 后通过自动批处理支持

3. React 事件机制的工作原理(三步流程)

(1)事件注册(初始化阶段)

• React 在组件挂载时,会遍历组件的事件属性(如 onClick),将其注册为事件委托(React16

及以前委托到 document,React17 及以后委托到组件挂载的根节点 root),而不是直接绑定到组件对应的真实 DOM 元素上。

• 注册时,React 会为每个合成事件分配一个唯一的标识,并将事件回调函数与标识关联,存储在内

部的回调函数映射表中。

(2)事件触发(运行时阶段)

  1. 用户操作触发真实 DOM 事件,该事件会按照原生 DOM 冒泡机制冒泡到委托节点( document

或 root)。

全站分卷索引 · 28 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷
  9. 9第 9 卷
  10. 10第 10 卷
  11. 11第 11 卷
  12. 12第 12 卷
  13. 13第 13 卷
  14. 14第 14 卷
  15. 15第 15 卷
  16. 16第 16 卷
  17. 17第 17 卷
  18. 18第 18 卷
  19. 19第 19 卷
  20. 20第 20 卷
  21. 21第 21 卷
  22. 22第 22 卷
  23. 23第 23 卷
  24. 24第 24 卷
  25. 25第 25 卷
  26. 26第 26 卷
  27. 27第 27 卷
  28. 28第 28 卷