React学习之基础理论知识

33 阅读4分钟

一、它是什么

React 是一个用来构建用户界面(UI)的 JavaScript 库,主要由 Facebook(现在的 Meta)开发和维护。 它最常用来做单页应用(SPA) 里的前端界面,比如后台管理系统、各种 Web App、复杂交互页面等。

React 的核心特点可以概括为三点:

  • 组件化:页面被拆成一个个可复用的组件(按钮、表单、列表、弹窗……)
  • 声明式:你只需要描述“界面在某个状态下应该长什么样”,不用手动一步步操作 DOM
  • 数据(状态)驱动视图:数据(state)变了,界面自动更新

一句话:React = 用组件 + 状态 来描述 UI 的工具

1.1 它出现的背景

在 React 出现之前,前端常见做法是:

  • 用 jQuery / 原生 JS

  • 手动操作 DOM

    $('#list').append(...)
    $('#btn').hide()
    $('#title').text(...)
    
  • 页面一复杂,就会变成:

    • 逻辑分散在各处
    • 状态和 UI 同步很容易出 bug
    • 改一个地方,可能影响一堆地方
    • 维护成本爆炸 🤯

本质问题是:

UI 是状态的映射,但我们却在“手动维护这个映射关系”

比如:

  • 登录 / 未登录
  • 加载中 / 加载完成
  • 列表新增 / 删除 / 排序 这些状态一多,靠人脑去“记住什么时候该改哪些 DOM”,非常容易乱。

1.2 什么是“声明式”

组件化数据驱动视图 很好理解,不过多描述;

声明式 它是React(以及现代前端)最核心的思想之一;

1.2.1 声明式(Declarative)的意思是:

你只需要“描述结果长什么样”, 不需要“描述一步一步怎么做到”。

对比一下:

  • 声明式

    现在是登录态 → 显示用户信息 现在是未登录 → 显示登录按钮

  • 命令式(传统 DOM 操作):

    先隐藏登录按钮 再创建用户信息 DOM 插入到某个节点 如果切回未登录,再把这些 DOM 删掉……

1.2.2 用生活例子理解

想象你去餐厅点菜:

  • 👨‍🍳 命令式: “先切菜 → 再开火 → 放油 → 翻炒 → 装盘” (你在指挥每一步怎么做)

    这种状态下开发者的身份:厨师 + 食客(顾客)

  • 🧑‍💼 声明式: “我要一份宫保鸡丁” (你只关心结果,过程交给厨师)

    这种状态下开发者的身份:顾客(食客);

    React 就是那个厨师 👨‍🍳 你只说:我要什么 UI,它帮你搞定怎么更新 DOM

1.2.3 代码对比:命令式 vs 声明式

❌ 命令式(原生 / jQuery 思路)
if (isLogin) {
  loginBtn.style.display = "none";
  userInfo.style.display = "block";
  userName.innerText = name;
} else {
  loginBtn.style.display = "block";
  userInfo.style.display = "none";
}

你要:

  • 自己找 DOM
  • 自己控制显示隐藏
  • 自己保证状态和 UI 不打架
  • 状态一多,分支爆炸 💥

✅ 声明式(React 思路)
function App({ isLogin, name }) {
  return (
    <div>
      {isLogin ? <UserInfo name={name} /> : <LoginButton />}
    </div>
  );
}

你只是在声明

如果 isLogin 为 true,UI 就是 UserInfo 否则,UI 就是 LoginButton

至于:

  • 之前 DOM 长啥样?
  • 现在要改哪些?
  • 是新增、删除还是更新?

👉 React 帮你算和处理。

1.2.4 结合 数据驱动视图 理解:

UI 是 state 的函数(UI = f(state)) 你负责描述:在“当前数据状态”下,界面应该长什么样 React 负责:当数据变了,计算差异并更新 DOM

注意一个小细节:

不是一定要"提前把每一种状态的视图都写死成分支”,而是:

  • 你写的是一个 “从 state 到 UI 的映射函数” — 对应组件化
  • state 变了 → 这个函数重新执行 → 得到新的 UI 描述
  • React 对比新旧结果 → 最小化更新 DOM

1.2.5 声明式 - 总结

命令式 UI:

  • 我告诉浏览器:第一步干嘛,第二步干嘛,第三步干嘛
  • 我负责过程
  • 容易乱、容易漏、难维护

声明式 UI:

  • 我只告诉 React:现在这种状态下,界面就该长这样
  • React 负责过程
  • 状态一变,UI 自动跟着变
  • 代码更直观、更好维护

二、它解决了什么痛点

1. UI = f(state)

在 React 里你只需要写:

当前状态下,界面应该长这样

function App() {
  const [count, setCount] = useState(0);
  return <div>{count}</div>;
}

count 变了:

  • 不用手动操作 DOM
  • React 会帮你自动更新界面

核心思想:

React 是: 数据 → 视图 的函数 你维护数据,React 负责把 DOM 变成“该有的样子”。

更口语化:你只管数据变不变,界面怎么变是 React 的事

2. 解决“复杂页面难维护”的问题(组件化)

以前:

  • HTML / JS / CSS 混在一起
  • 一个页面几千行,改起来像拆炸弹

React:

  • 页面拆成一个个组件

  • 每个组件:

    • 管自己的 UI
    • 管自己的逻辑
    • 可以复用
  • 大型项目结构会清晰很多

3. 降低心智负担:从“怎么改 DOM” → “状态变了会怎样”

以前你要想的是:

点按钮 → 改这个 DOM → 再改那个 DOM → 注意别漏了那个 DOM

现在你想的是:

点按钮 → 改状态 → 界面自然变成新状态对应的样子

关注点从“操作过程”变成“结果描述” ,这就是声明式的价值。

三、总结

React 的出现主要是为了解决:

  • ❌ 手动操作 DOM 导致的复杂度爆炸
  • ❌ UI 和状态同步困难、容易出 bug
  • ❌ 大型前端项目难以维护的问题

它的核心解法是:

  • 用组件化 + 状态驱动 + 声明式 UI
  • 让开发者专注“数据和结构”,而不是“怎么操作 DOM”