返回知识库

界面与交互 · 网页基础

组件Component

把重复的界面和行为封装成独立单元;修改一次,所有使用它的地方都能同步更新。

改组件本体,看使用处同步变

组件把稳定结构和行为收拢,差异从 props 进入。改一处本体,所有使用处一起变——这就是「只维护一份」的来源。

场景:ProductCard 是商品卡的组件本体。改它的按钮文案或圆角,已有使用处立即同步;点「再加一处使用」看复用计数长在物件上。

组件本体ProductCardimage · title · price · action

复用 2action = 加入清单圆角 =

  • 首页
    帆布包¥29
    加入清单props → title=帆布包 · price=¥29
  • 搜索结果
    水杯¥49
    加入清单props → title=水杯 · price=¥49

对照:组件本体的按钮文案「加入清单」、圆角(),应与上方每个使用处实例的按钮完全一致;改一处,2 处一起变。

组件 ProductCard 现在被 2 处复用。改本体的按钮文案或圆角,已有使用处会同步;点「再加一处使用」看复用计数长。下一步:先试试改按钮文案或圆角。

抽组件时要盯这些

实验台证明的是机制;真正抽组件时,用这五条检查边界。

  1. 稳定结构 + 变化数据多处用同样的图片、标题、价格、按钮结构,只是数据不同——把结构抽成组件,数据设计成 props。
  2. 差异靠 props,不靠复制粘贴两处实例的 title、price 各自传入;按钮文案、圆角这类统一规则放组件本体,改一次全部同步。
  3. 复用次数要看得见一个组件被几处复用、改一处几处跟着变,是它值不值得抽的依据;实验台里复用计数就长在使用处列表上。
  4. 命名说用户看见的东西组件叫 ProductCard,不叫 FlexColumnBox;名字对应它渲染出的物件,而不是技术实现细节。
  5. 同一结构只出现一次时先不抽如果某段界面全站只出现一次,且没有第二处会复用的迹象,先写直白;强行抽反而多一层跳转。

什么时候抽组件,什么时候别硬抽

看结构和变化的规则,而不是看页面名字或元素标签是否相同。

适合稳定结构 + 可预测的变化数据

商品卡、文章卡、用户条目:图片、标题、副标题、操作按钮结构相同,数据字段不同,用 props 传入。

适合共同交互 + 变化去向

多处都要「加入清单」,但成功后各自刷新不同列表;视觉和基础状态放组件,页面用回调决定后续。

不建议只因元素名相同就硬塞

两个区域都有一个标题,但信息层级、排版、操作规则都不同;硬合成万能组件会比复制更难维护。

不建议一次性且没有第二处迹象

某段布局只用在一处,且没有会复用的迹象;先写直白,等第二处真出现再抽,避免过早抽象。

怎么抽:从重复结构到可复用单元

从识别重复到验证同步的最短路径。

  1. 圈出重复结构:标出两处以上长得一样、行为一样的界面区块。
  2. 分清稳定与变化:固定不变的部分(版式、按钮规则)留给组件;会变的部分(标题、价格、图片)写成 props。
  3. 给组件起一个看名字就懂的名字(ProductCard),列出它的 props 清单(title、price、onAdd)。
  4. 在原来每处传入各自的 props 数据,删掉复制的重复结构。
  5. 改组件本体的一个细节(按钮文案或圆角),验证所有使用处一起变——和实验台里一样。

正反例:同一组商品展示,只改一个关键选择

目标都是展示商品。差别只在「是否真的复用了同一个组件」。

正例三处都复用 ProductCard,各自传 props

首页、搜索、推荐都渲染 ProductCard,只传入不同 title 与 price;按钮文案和圆角由组件统一。改按钮文案一次,三处同时更新。

这样抽
反例把商品卡和侧栏推荐硬塞进一个万能组件

侧栏推荐的信息层级、图片尺寸、操作规则都和商品卡不同,却为「少写代码」合并;改商品卡的按钮,侧栏的标签也跟着错位,改一处崩两处。

别硬塞

快速自测

两处界面看起来有点像,下面哪种最值得抽成同一个组件?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。