💡 组件设计理念
mengyue-components 不是在“造组件”,而是在“提炼思想”。 希望通过可复用的结构、语义化的设计、统一的逻辑模型,让前端开发从“堆代码”走向“构建系统”。 设计的理念从来都是: 用最少的代码实现最丰富与复杂的功能。
这并非介绍组件内容,而是记录整个组件库设计过程中的 思考逻辑与哲学原则。
所以所阐述的不是“某个组件如何用”,而是“为什么存在这个组件”与“如何设计这个组件”等。
🧭 设计的起点:从问题出发
每一个组件的诞生都源于一个“痛点”。 在实际项目中,我们遇到的挑战不是“缺少组件”,而是“缺少一套连贯的解决方案”。 因此,这个库的设计从来不是堆叠功能,而是基于以下两个问题展开:
- 什么是真正通用的抽象?
我们要让组件能在多项目中重用,而不是一次性产物。 - 如何让交互逻辑与视觉表现解耦?
这样,组件才能在不同主题、平台或交互层中复用。
换言之,每个组件的出现都是“问题驱动”的。 没有凭空的设计,只有针对性的解法。
🧩 抽象的边界:设计不是创造,而是取舍
组件的设计核心不在“能做什么”,而在“不做什么”。
过度封装会让组件变得臃肿,而过度抽象又会失去使用价值。
mengyue-components 的策略是——在每个组件的生命周期中明确三层边界:
- 结构边界:只定义基础结构,不干涉用户的业务样式。
- 逻辑边界:仅负责组件内的逻辑,不承担外部状态。
- 扩展边界:留出插槽与事件接口,让外部有空间去“再设计”。
设计的成熟,不是功能多,而是知道哪里该停。
🧠 组件的哲学:从“零件”到“语言”
在设计初期,发现一个关键问题:如果组件只是“零件”,那么它只能被机械的拼装。但如果它能成为“语言”,那开发者就能用它去“表达思想”。
于是我们确立了一个目标:让每个组件都具备 语义一致性 和 可组合性, 使它们能像句子一样组合出复杂的逻辑与交互。 这种理念促成了三个设计原则:
- 一切都是表达:按钮不是点击器,而是动作的声明。
- 一切都可组合:组件不是黑盒,而是拼图的一块。
- 一切皆有语义:组件的命名、属性、行为都要服务于清晰表达。
⚙️ 从视觉到逻辑的“层分离”思想
传统 UI 组件库往往把“视觉 + 逻辑”绑定在一起,这会导致复用性差。所以会拆解出三个平行层次:
- 结构层(Structure Layer):组件的基础 DOM 和可交互区域。
- 逻辑层(Logic Layer):通过 Composition API 管理内部状态与事件流。
- 表现层(Presentation Layer):基于 Token 的统一样式系统,负责视觉统一。
这样设计的意义是:
当样式变化时,不必修改逻辑; 当逻辑变化时,不必破坏结构。
这种清晰的层次划分,保证了组件在复杂项目中的可维护性与长期演进能力。
🧭 状态与可控性:让组件“听话”但不“死板”
组件既要能自动运作,也要能被完全控制。因此在设计时,我们强调“可控与非可控并存”的理念。
- 非可控模式:用户只传入最小必要配置,组件自动处理内部状态。
- 可控模式:通过 v-model/modelValue、事件回调等机制,让用户接管内部逻辑。
这种双向模式,使得组件既能“即插即用”,又能“深度定制”。
我们称这种模式为 「渐进式可控」 —— 开发者只需按需介入复杂度。
🔄 组合式逻辑与可扩展架构
随着 Vue 3 的 Composition API 普及,我们将逻辑复用视为核心竞争力。mengyue-components 的内部逻辑几乎全部采用组合式封装:
- 通用的状态逻辑被抽离为 Hooks(如
useVisible、useKeyboard、useTheme)。 - 组件间通过自定义事件与上下文通信,避免强依赖。
- 插件机制允许开发者以统一入口扩展功能,而无需修改源码。
组件库不是封闭系统,而是可生长的生态。
🧩 可访问性与交互伦理
一个现代组件库必须考虑 Accessibility(可访问性)。
设计理念是:“交互不只是视觉体验,更是包容性的设计。”
- 所有交互元素都具备键盘操作与 ARIA 属性。
- 动画节奏遵循“感知舒适原则”,避免突兀与强闪烁。
- 错误提示与状态变化都有非视觉信号(如语音辅助或焦点移动)。
技术的温度,来自设计的体贴。
🧾 从工具到思想
回顾整个设计过程,我们并没有在追求“更多的组件”,而是在追求“更好的表达方式”。
mengyue-components 的意义,在于:
- 建立一套能被理解、被继承、被改造的设计语言;
- 让每一个组件都具备清晰的边界与目的;
- 让“组件化”不只是工程手段,而是思考问题的方式。
💬 “创造的从不是按钮、表格或弹窗,而是前端表达的语法。”
当开发者开始用这套语言说话时,组件库的设计就真正完成了。
说明
一些组件库的的设计有一定程度用了hooks或者工具函数,在阅读前需要了解这些函数的含义。