图像与设计
从 json-render UI spec 生成代码(遍历…
当需要把 json-render 的 UI spec/tree 转换成 Next.js、Remix 等框架的代码,或自行编写代码导出器时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
从 json-render UI spe特定
解决思路
- 安装依赖:npm install @json-render/codegen。
- 用 traverseSpec(spec, (element, key, depth, parent) => {...}) 对 spec 做深度优先遍历,在回调中按 depth 处理每个节点。
- 用 collectUsedComponents(spec) 获取 spec 中用到的全部组件类型集合(如 Set { "Card", "Metric", "Button" })。
- 用 collectStatePaths(spec) 获取所有被引用的 state 路径集合(如 Set { "analytics/revenue", "user/name" }),用于生成数据绑定或导入。
- 用 collectActions(spec) 获取所有 action 名称集合(如 Set { "submit_form", "refresh_data" }),用于生成事件处理函数。
- 用 serializePropValue(value) 序列化单个 prop 值,返回 { value, needsBraces };普通字符串得到 needsBraces: false,而 { $state: "/user/name" } 这类表达式得到 needsBraces: true,据此决定渲染成 title="x" 还是 prop={...}。
- 用 serializeProps({ title: "Dashboard", columns: 3, disabled: true }) 把整个 props 对象序列化成 JSX 属性字符串(如 'title="Dashboard" columns={3} disabled')。
- 用 escapeString('hello "world"') 转义字符串中的引号,避免生成的代码语法错误。
- 需要定制输出格式时传入 SerializeOptions:quotes 取 "single" 或 "double" 控制引号风格,indent 控制缩进。
- 实现自定义导出器时,定义符合 CodeGenerator 类型的对象,其 generate(spec) 方法返回 GeneratedFile[],每项形如 { path: "app/page.tsx", content: "..." }。
- 编写具体导出函数(如 generateNextJSProject(spec: Spec): GeneratedFile[]):从 @json-render/core 引入 Spec 类型,组合 collectUsedComponents、collectStatePaths、traverseSpec、serializeProps,生成 package.json、各组件文件和主页面文件后返回文件数组。
适用边界 · 注意事项
- spec 不是 json-render 的 UI tree,或要转换的是其他格式的 UI 描述。
- 只需要渲染页面、不需要产出可复用的源码文件。
- 目标框架已有现成的官方 exporter,无需自己实现自定义生成器。