React-核心特性全解析

35 阅读3分钟

前言

React 能够成为前端领域的霸主,不仅仅是因为它好用,更因为它带来了一场关于“视图即状态”的思想变革。理解 React 的核心特点,是深入学习 Hook、Redux 等生态的基石。

一、 JSX 语法:超越模板的灵活表达

JSX(JavaScript XML)是 JavaScript 的语法扩展,它让 HTML 结构能够直接写在 JS 逻辑中。

1. JSX 的核心规则

  • 代码优化:JSX 在编译阶段(由 Babel 完成)会被转换为 React.createElement。编译器会进行静态分析和代码优化,执行效率极高。

  • 命名规范

    • HTML 标签:必须全小写字母(如 <div>)。
    • 自定义组件:必须首字母大写(如 <MyComponent />)。
    • 驼峰命名:事件名(onClick)与样式属性名(backgroundImage)均采用驼峰法。
  • 属性差异:由于 class 是 JS 关键字,需改写为 className

2. 书写限制与技巧

  • 单一顶层标签render 函数返回的 JSX 必须被一个父标签包裹(如使用 <Fragment> 或简写 <>...</>),否则 Babel 无法将其转换为单一的 JS 对象。
  • 大括号表达式:在 {} 中可以书写任何有效的 JS 变量、函数调用或表达式。
  • 对象式样式style 属性接收的是一个 JS 对象(如 style={{ color: 'red' }}),而非传统的 CSS 字符串。

二、 虚拟 DOM (Virtual DOM):极致的性能平衡

虚拟 DOM 并不是“真的快”,而是它通过最小化真实 DOM 操作,保证了性能的下限

1. 什么是虚拟 DOM?

它是用普通的 JavaScript 对象来描述真实 DOM 树。这个对象包含了标签名、属性和子节点等信息,与真实 DOM 节点一一对应。

2. 虚拟 DOM 与真实 DOM 的对决

维度虚拟 DOM真实 DOM
本质内存中的 JS 对象浏览器的原生对象
重绘与回流不会直接触发重绘回流,操作代价极小频繁触发重绘回流,消耗大量性能
更新策略差异化更新。通过 Diff 算法找出变化部分,进行定向增删改通常需要完全销毁旧节点并重新创建

3. React Fiber

React 现在引入了 Fiber 架构,它将渲染工作拆分为多个小任务,利用浏览器的空闲时间进行处理,解决了大量 DOM 节点导致页面卡顿的问题。


三、 单向数据流 (Unidirectional Data Flow)

React 遵循“自顶向下”的数据流动模式,这使得应用的状态追踪变得极其清晰。

  1. 数据下钻:数据通过 props 从父组件传递给子组件。
  2. 只读性:子组件无法直接修改接收到的 props。如果子组件想改变状态,必须调用父组件通过 props 传下来的回调函数,在父组件中修改状态(state)后再重新向下传递。
  3. 优势:这种模式避免了数据流动的混乱,使得调试(Debug)时能快速定位到是谁修改了数据。

四、 其他核心特征

  1. 组件化 (Component-Based)

    • 将 UI 拆分成独立、可复用的代码块。组件可以拥有自己的状态(State),这极大地提高了大型项目的可维护性。
  2. 声明式编程 (Declarative)

    • 在 React 中,你只需要告诉它“UI 应该长什么样”,而不需要手动操作 DOM 告诉它“如何去改变”。React 会根据状态自动更新视图。