Cadenza
EN

resolveRenderChildren

双形态 children 的统一解析 —— ReactNode 或 (state) => ReactNode

本库有几处 children 是双形态的:普通 ReactNode,或 (values) => ReactNode 的函数。resolveRenderChildren 是这个契约的唯一解析器 —— 封装层算好状态和默认 组合,把两种形态收敛成一个 ReactNode。语义(连同下面那条 nullish 回落)沿用当年 RAC useRenderProps 的收尾行为:

import { resolveRenderChildren } from '@gedatou/cadenza-utils'
 
resolveRenderChildren(children, values, defaultChildren?)
  • 函数 children:以 values 外加 defaultChildren 为参数调用;
  • 节点 children:原样使用;
  • 两条路的 nullish 结果都回落到 defaultChildren —— 收尾是 computedChildren ?? defaultChildren,所以函数返回 null 拿到的是默认组合 而不是空白。「渲染空」靠不给 defaultChildren 表达,不靠在它头上返回 null

行为的规格书是 packages/utils/test/resolve-render-children.test.ts

库内用法

  • SearchField:在自己的 render 体里解析调用方 children,把默认组合 (InputGroup + 搜索图标 + 输入框 + 清除按钮)作为 defaultChildren 传入 —— 函数 children 于是可以「在默认组合基础上加」而不必重造;
  • InfiniteCombobox:解析 trigger 的双形态 children,不给 defaultChildren —— 触发器没有默认长相,必须由调用方给。

业务层给组件再包一层、需要同款「传 ReactNode 或按状态渲染」契约时,直接用它。