跳转至

React 概览

React 特性概览

核心特性表格

特性 描述 优势
JSX 语法 在 JavaScript 中描述 UI 结构 类型安全,更好的工具支持
单向数据流 自上而下的数据流动,便于推理 可预测的状态变化
虚拟 DOM 基于 Diff 算法的高效更新 更好的性能
声明式编程 描述状态,React 负责渲染 更容易理解和调试
组件化 复用与组合 模块化开发

React 架构概览

graph TD
    A["React 核心特性"] --> B["JSX 语法"]
    A --> C["虚拟 DOM"]
    A --> D["单向数据流"]
    A --> E["组件化"]
    A --> F["声明式编程"]

    B --> B1["JavaScript + HTML"]
    C --> C1["Diff 算法"]
    D --> D1["父 → 子"]
    E --> E1["可复用组件"]
    F --> F1["状态 → 界面"]

虚拟 DOM 与 Diff 算法

真实 DOM 与虚拟 DOM 对比

方面 真实 DOM 虚拟 DOM
本质 浏览器 DOM 节点 JavaScript 对象
性能 操作缓慢 操作快速
内存使用 高 低
更新成本 昂贵 便宜
直接操作 可能 不可能

虚拟 DOM 创建过程

graph TD
    A["JSX 代码"] -->|"Babel 转换"| B["React.createElement()"]
    B --> C["虚拟 DOM 对象"]
    C --> D["Diff 算法"]
    D --> E["真实 DOM 更新"]

    F["之前的虚拟 DOM"] --> D
    G["新的虚拟 DOM"] --> D

JSX 到虚拟 DOM 示例

JSX 代码:

const vDom = <h1 className="title">Hello World</h1>;

Babel 转换:

const vDom = React.createElement(
  'h1',
  { className: 'title' },
  'Hello World'
);

虚拟 DOM 对象:

{
  "type": "h1",
  "key": null,
  "ref": null,
  "props": {
    "className": "title",
    "children": "Hello World"
  }
}

Diff 算法策略

策略 描述 示例
同层比较 只比较同一层级的节点 维持父子关系
组件类型检查 不同类型触发完全替换 <div> → <span> = 完全重建
基于 key 的识别 使用 key 属性识别列表项 高效列表更新

Key 选择最佳实践

Key 类型 性能 稳定性 推荐度
唯一 ID ⭐⭐⭐ 优秀 ⭐⭐⭐ 稳定 ✅ 推荐
数组索引 ⭐ 差 ⭐ 不稳定 ❌ 避免
随机值 ⭐ 差 ⭐ 不稳定 ❌ 永不使用