跳转至

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 ⭐⭐⭐ 优秀 ⭐⭐⭐ 稳定 ✅ 推荐
数组索引 ⭐ 差 ⭐ 不稳定 ❌ 避免
随机值 ⭐ 差 ⭐ 不稳定 ❌ 永不使用