理解“在react 中,一切都是组件”这句话
这句话 “在 React 中,一切都是组件” 是理解 React 的核心思想之一。
一句话总结
React 的页面不是由“页面”、“模块”、“按钮”等概念组成的,而是由一个一个“组件”构成的。所有结构都统一用组件来描述。
为什么叫“一切都是组件”?
在 React 世界里:
-
页面是组件
-
模块是组件
-
栏目是组件
-
按钮是组件
-
表单项是组件
-
弹窗是组件
-
图标甚至一段文本都可以是组件
也就是说,你看到的 任何 UI 单元都可以被封装成一个独立的组件,并且像积木一样组合起来。
举个例子
传统 HTML:
<button>提交</button>
在 React 中你完全可以认为这是一个组件:
function SubmitButton() {
return <button>提交</button>
}
然后你可以像使用标签一样复用:
<SubmitButton />
<SubmitButton />
React 的核心:UI = 组件树
React 会把页面渲染成一个组件树(component tree):
App
├── Header
├── Sidebar
├── UserForm
│ ├── Input
│ ├── Input
│ └── SubmitButton
└── Footer
你写的每个 jsx 标签其实都是一个组件(原生 DOM 标签也是 React 内置的组件)。
组件的本质
组件本质上是:
- 接收输入 (props)
- 管理自身状态 (state)
- 返回 UI 描述 (jsx)
也就是说,React 统一了所有构建 UI 的方式,让每个模块都有:
-
结构
-
样式
-
行为
-
状态
并且是独立可复用的单元。
为什么要“一切组件化”?
好处 1:提高复用性
一个按钮,一个对话框,一个表格单元格都可以组件化 → 到处可复用。
好处 2:提高可维护性
每个组件有自己的逻辑,互不影响 → 模块清晰。
好处 3:状态更清晰
每个组件自己维护自己的 state,不会乱。
好处 4:降低复杂度
把页面拆成小组件 → 复杂页面就变得简单。
举个最容易理解的例子
你写一个电商的 SKU 属性选择:
传统写法:HTML + jQuery
React 写法:都是组件
ProductPage
├── ImageGallery
├── Title
├── Price
├── SkuSelector
│ ├── SkuAttribute
│ │ ├── SkuOption
│ │ ├── SkuOption
│ │ └── ...
│ └── ...
└── AddToCartButton
每块完全可以拆成组件。
终极总结
在 React 中,整个应用是由组件树构成的。
React 把 UI 抽象成可组合、可复用、可管理状态的组件。
组件是 React 的最小单位,因此我们说“在 React 中,一切都是组件”。
浙公网安备 33010602011771号