闭包通过封装样式维度实现灵活、隔离、可复用的 ui 样式生成逻辑:各维度(主题、尺寸、交互等)定义为独立闭包,互不依赖;高阶闭包组合多维参数生成样式工厂;支持运行时动态切换与结果缓存;天然适配 arkui @builderparam 和 react render props 模式。

闭包本身不直接生成样式,但它能构建灵活、隔离、可复用的 UI 样式生成逻辑。关键在于:用闭包封装样式参数的组合规则与作用域,让不同维度(如主题、状态、尺寸、交互反馈)彼此解耦,又能在调用时按需聚合。
用闭包封装样式维度,避免全局污染
每个样式维度(比如 colorScheme、sizeLevel、hoverEffect)都定义为独立闭包函数,内部持有自己的默认值和校验逻辑,外部无法直接修改其私有状态:
- colorScheme 闭包返回一个接受主题名并输出 CSS 变量映射的对象,不依赖其他维度
- sizeLevel 闭包只处理 padding、font-size、border-radius 的比例缩放,输入是 'sm'/'md'/'lg',输出纯数值配置
- 各闭包之间无引用关系,修改 colorScheme 不会影响 sizeLevel 的行为
通过高阶闭包组合多维参数
定义一个主生成器函数,它接收多个维度闭包作为参数,并返回一个可配置的样式工厂:
- 该工厂函数接收业务数据(如 isDisabled、hasError)和用户传入的维度覆盖值
- 内部按需调用各维度闭包,例如 colorScheme(theme) + sizeLevel(size) + hoverEffect(enabled)
- 最终合并为一个扁平化的 style 对象,或直接生成内联 style 字符串 / className
支持运行时动态切换,且不触发全量重算
闭包天然维持对初始配置的引用,因此可以安全缓存中间结果:
- 对固定 theme + size 的组合,缓存其计算出的 CSS 变量对象,下次相同输入直接复用
- 当 only hover 状态变化时,仅重新执行 hoverEffect 闭包,其余维度结果复用
- 避免把所有参数塞进一个大对象再做深比较,减少不必要的 diff 开销
与 ArkUI @BuilderParam 或 React render props 模式自然对接
闭包生成的样式逻辑可直接作为构建函数的参数注入 UI 组件:
- 在 ArkTS 中,将样式闭包赋给 @BuilderParam 装饰的字段,父组件按需传入不同主题/尺寸版本
- 在 React 中,作为 render prop 传入,子组件只负责结构,样式逻辑由闭包提供,实现结构与表现彻底分离
- 无需额外状态管理库,闭包自身就是轻量级、无副作用的“样式上下文”










