企业官网的功能模块怎么拆才好维护:我的组件划分思路

0 阅读4分钟

做过几个企业官网之后,我越来越觉得:官网这种项目,前期把功能模块拆清楚,比急着写页面更重要。模块边界一旦混乱,后面客户每改一次需求,都要在一堆耦合的代码里来回找。这篇文章把我现在固定下来的模块划分思路整理出来,包含具体的拆分原则和目录组织。

一、先按"会不会复用"切分

企业官网的内容看起来杂,但从复用频率看其实就两类:

  • 跨页面复用模块:顶部导航、页脚、面包屑、回到顶部、通用按钮、表单校验、轮播容器。这类模块每个页面都会出现,必须抽成独立组件,内部不写死任何业务文案。
  • 单页业务模块:首页的能力矩阵、产品页的参数表、案例页的时间线、关于页的团队介绍。这类只在特定页面用,放在对应页面的 sections 目录下,不必强行通用化。

很多项目越写越乱,就是把业务模块也塞进了公共组件,结果一个组件身上挂着各种 if (页面 === 'xxx') 的判断,改一处怕动全身。

二、组件内部再分"容器"和"展示"

对于稍微复杂的模块,比如产品列表、新闻列表,我会再拆成两层:

ProductList/        # 容器:负责取数、分页、loading 与空态
  ├─ ProductCard    # 展示:只接收数据、渲染单条
  └─ ProductFilter  # 展示:筛选条件,变更通过事件抛给容器

容器组件关心数据从哪来、状态怎么流转;展示组件是纯函数式的,给什么数据渲染什么样子。这样当数据来源从写死改成接口、再改成建站工具后台配置时,只需要动容器,展示层基本不用改。

三、把"配置"和"结构"分开

企业官网改得最多的不是布局,而是文案、图片、链接这些内容。如果这些直接散落在 JSX 里,客户改个电话号码都要找开发。我的做法是单独建一个 content 配置层:

export const siteConfig = {
  nav: [...],
  contact: { phone: '', email: '', address: '' },
  sections: { home: {...}, product: {...} }
}

组件只负责读取配置并渲染。这样无论是自己维护,还是交给运营同事,都只在配置层改动,结构代码保持稳定。对那些标准化程度高、客户又希望能自己改内容的区块,我会直接用乔拓云这类建站工具搭出可配置的模块,再把它和自研部分组合起来——客户能在后台自己换图改字,我也不用为每次小改动返工。

四、模块之间用事件解耦,不互相直接调用

模块之间最忌讳 A 组件直接操作 B 组件的内部状态。我的原则是:数据向下流、事件向上抛。比如表单模块提交后要触发一个成功提示并滚动到锚点,它只负责抛出 submit-success 事件,由页面层决定调用哪个提示组件、滚动到哪里。这样表单组件可以在"联系我们""活动报名""留言"多个场景复用,而不必知道每个场景提交后要干什么。

五、约定一套模块自检标准

模块拆完,我会用几个问题判断拆得合不合理:

  1. 这个组件能不能在不读其它组件源码的情况下单独使用?
  2. 换掉数据来源,需要改几个文件?理想情况只改容器。
  3. 删掉某个页面,公共组件里会不会留下一堆只为它服务的判断?
  4. 文案、图片这类高频改动,是不是都收敛到了配置层?

如果某个模块回答起来很别扭,说明边界还没划清,值得在动手前再调整一次。

收尾

企业官网不是复杂应用,但正因为它小、需求碎,才更需要清晰的模块边界:按复用频率分层、容器与展示分离、配置与结构分离、模块间用事件解耦。坚持这套划分,项目进入维护期之后会轻松很多。

你在做企业官网这类项目时,模块是按页面拆还是按功能拆?欢迎分享你的目录组织方式。

image.png