react声明式编程和命令式编程区别小结

 更新时间:2026年06月23日 10:24:06   作者:光影少年  
本文主要介绍了react声明式编程和命令式编程区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、核心区别(一句话版本)

  • 命令式编程:告诉程序“怎么做”(步骤)
  • 声明式编程(React):告诉程序“我要什么结果”

二、用一个直观例子对比

🧱 场景:点击按钮切换文本

1️⃣ 命令式写法(传统 DOM 操作)

const btn = document.getElementById('btn');
const text = document.getElementById('text');
btn.addEventListener('click', () => {
  if (text.innerText === 'Hello') {
    text.innerText = 'World';
  } else {
    text.innerText = 'Hello';
  }
});

👉 特点:

  • 手动操作 DOM
  • 自己控制状态变化
  • 自己负责更新 UI

2️⃣ 声明式写法(React)

function App() {
  const [text, setText] = React.useState('Hello');
  return (
    <>
      <p>{text}</p>
      <button onClick={() => setText(text === 'Hello' ? 'World' : 'Hello')}>
        切换
      </button>
    </>
  );
}

👉 特点:

  • 只描述:UI = state 的映射
  • 不关心 DOM 怎么更新
  • React 帮你做 diff + 更新

三、思维方式差异(重点)

命令式思维(你在“操控”)

1. 找到 DOM
2. 判断当前值
3. 修改 DOM

你要关心:

  • DOM 查询
  • DOM 修改
  • 状态同步问题

👉 容易出 bug(尤其复杂页面)

声明式思维(你在“描述”)

UI = f(state) 

你只关心:

  • state 是什么
  • UI 应该长什么样

👉 剩下的 React 帮你处理

四、为什么 React 一定要声明式?

核心原因就一个:复杂度爆炸时,命令式扛不住

🧠 举个真实场景

一个页面:

  • 表格数据
  • loading 状态
  • 错误提示
  • 分页
  • 筛选条件

❌ 命令式写法

你要:

  • 手动控制 loading 显示/隐藏
  • 手动更新表格 DOM
  • 手动处理错误 UI
  • 状态容易乱

👉 很快变成“屎山”

✅ React 声明式

if (loading) return <Loading />;
if (error) return <Error />;
return <Table data={data} />;

👉 清晰、可维护

五、底层原理(你做前端建议理解)

React 的声明式依赖:

🔹 Virtual DOM(虚拟 DOM)

流程:

state 变化
   ↓
重新 render(生成新虚拟 DOM)
   ↓
diff 算法对比
   ↓
最小化更新真实 DOM

👉 你不用手动操作 DOM

六、优缺点总结

👍 声明式(React)

优点:

  • 可读性高
  • 逻辑清晰
  • 易维护
  • 适合复杂 UI

缺点:

  • 学习成本(状态、hooks)
  • 性能需要理解优化(memo、useCallback)

👍 命令式

优点:

  • 直接、简单
  • 性能可控(细粒度操作)

缺点:

  • 难维护
  • 状态容易错乱
  • 代码冗余

七、一个更高级的理解(建议你掌握)

React 本质是:

状态驱动 UI(State-driven UI)

公式:

UI = f(state) 

这就是声明式的核心。

八、你可以这样记(面试用)

👉 一句话总结:

React 的声明式编程是通过描述 UI 与状态的关系,让框架自动完成 DOM 更新,而不是手动操作 DOM,从而降低复杂度,提高可维护性。

 到此这篇关于react声明式编程和命令式编程区别小结的文章就介绍到这了,更多相关react声明式编程和命令式编程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vite+React+TypeScript手撸TodoList的项目实践

    Vite+React+TypeScript手撸TodoList的项目实践

    本文主要介绍了Vite+React+TypeScript手撸TodoList的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 关于react 父子组件的执行顺序

    关于react 父子组件的执行顺序

    这篇文章主要介绍了关于react 父子组件的执行顺序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • React useCallback钩子的作用方法demo

    React useCallback钩子的作用方法demo

    这篇文章主要为大家介绍了React useCallback钩子的作用方法demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 简单的React SSR服务器渲染实现

    简单的React SSR服务器渲染实现

    这篇文章主要介绍了简单的React SSR服务器渲染实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • IntersectionObserver实现加载更多组件demo

    IntersectionObserver实现加载更多组件demo

    这篇文章主要为大家介绍了IntersectionObserver实现加载更多组件demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • React 中如何将CSS visibility 属性设置为 hidden

    React 中如何将CSS visibility 属性设置为 hidden

    这篇文章主要介绍了React中如何将CSS visibility属性设置为 hidden,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • react如何添加less环境配置

    react如何添加less环境配置

    这篇文章主要介绍了react如何添加less环境配置,本文给大家分享遇到问题及解决方案,结合示例代码图文给大家介绍的非常详细,需要的朋友参考下吧
    2022-05-05
  • 一文理解Redux及其工作原理

    一文理解Redux及其工作原理

    这篇文章主要介绍了一文理解R通过围绕主题展开详细edux及其工作原理,文章通过主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • React组件间传值及跨组件通信详解

    React组件间传值及跨组件通信详解

    这篇文章主要介绍了React组件间传值及跨组件通信的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • Component与PureComponent对比解析

    Component与PureComponent对比解析

    这篇文章主要为大家介绍了Component与PureComponent解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论