在 React 与 Vue 中,为什么要封装组件?

34 阅读3分钟

背景:带的一个新人(1年工作经验不到),给他做代码审查,其中有一个文件超过1000行,让他封装出几个组件,他存在疑问,说这又没有复用性,为什么要封装,所以才有了接下来的内容,既是给他看的,也是给有类似疑惑的人看的。

ReactVue 中封装组件,是前端开发最核心的思想之一。 简单说:组件化就是把页面拆成一个个“可复用、可维护、独立”的功能模块。

下面我给你从“为什么必须封装组件”→“不封装会怎样”→“组件带来的工程价值”三个层面完整解释。


🎯 一、为什么要封装组件?(核心原因)

1️⃣ 复用性(Reusability)

如果一个 UI 或功能会在多处使用,封装成组件能让你 写一次,到处用

例子:

  • 按钮 Button
  • 弹窗 Modal
  • 卡片 Card
  • 列表 List
  • 搜索框 SearchBox

不封装:复制粘贴若干份,出现 Bug 你要改 n 次。

封装后:改一个地方,全局生效。


2️⃣ 降低复杂度(Divide & Conquer)

一个页面越来越复杂,如果不组件化,会变成:

一个 1000 行甚至几千行的大文件

难读、难维护、难排错。

封装组件就像“把大任务拆成小任务”,每个组件只负责自己的一部分:

  • 页面布局组件
  • 业务组件(例如 UserCard)
  • 原子组件(Button, Input 等)

最终让页面变成一个“组件树”而不是一坨。


3️⃣ 清晰的职责划分( Separation of Concerns

每个组件只做自己的事情,不互相干扰。

例如:

  • Button 只负责按钮样式和点击事件
  • UserCard 只渲染用户信息
  • ProductList 只负责列表结构,不关心具体 UI

这样的代码更“工程化”。


4️⃣ 提高可维护性(Maintainability)

组件是独立、封闭的结构(inputs → outputs),人可以很快定位问题。

例如你调试一个表格问题,只要打开 Table 组件,而不是整个页面。

维护成本直线下降。


5️⃣ 提高团队协作效率

团队多人开发时,如果不组件化,代码会互相覆盖、互相依赖,非常混乱。

组件化可以让不同人各做各的:

  • A 做 Header
  • B 做 Sidebar
  • C 做 Content
  • D 做 UserCard 最后组合起来。

合作效率会高很多。


6️⃣ 可测试性(Testability)更好

一个组件的功能可被独立测试:

  • 单元测试
  • UI 测试
  • 快照测试

不像大页面那样难以隔离。


7️⃣ 便于封装逻辑(逻辑复用)

React 有 Hooks,Vue 有 Composition API。

你能把“交互逻辑”也封装成独立模块:

  • useFetch
  • useForm
  • useModal
  • useDebounce

页面功能复杂但代码依然清晰。


⚠️ 二、不封装组件会怎样?

  • 页面文件巨大(上千行)
  • 相同 UI 层层重复
  • 改一次 UI 要改很多地方
  • 新人很难读懂代码
  • 团队协作冲突频繁
  • Bug 难定位
  • 难以维护(尤其两三个月后看不懂自己写的)

这就是为什么现代框架都强调组件化的原因。


🧭 三、总结:为什么 React/Vue 要“组件化”?

一句话总结:

组件化就是把大问题拆成可复用的小模块,让代码更简单、更好维护、更易协作。