框架渲染器负责将 Storybook 的通用故事执行模型适配到 Vue、React、Angular 等特定的前端框架。它们实现了特定于框架的渲染逻辑、组件挂载以及文档源代码生成。
有关渲染器集成的更广泛的插件系统的信息,请参阅 插件系统。有关编排渲染器执行的核心预览系统的信息,请参阅 预览系统。
框架渲染器遵循标准化的接口,使 Storybook 能够在不同的前端框架中渲染故事,同时保持诸如控件、操作和文档生成等功能的行为一致。
来源:code/renderers/vue3/src/render.ts1-176 code/renderers/react/src/docs/jsxDecorator.tsx1-266 code/frameworks/angular/src/client/docs/sourceDecorator.ts1-63
Vue 3 渲染器体现了所有框架渲染器实现的标准渲染器接口。核心函数提供了故事渲染、组件挂载和响应式更新。
render 函数从故事组件创建 Vue 渲染函数
renderToCanvas 函数管理完整的渲染生命周期,包括应用创建、挂载和清理。它维护一个活动 Vue 应用的映射,以实现高效的更新和正确的清理。
来源:code/renderers/vue3/src/render.ts10-19 code/renderers/vue3/src/render.ts43-112 code/renderers/vue3/src/render.ts35-41
每个框架渲染器都实现了源代码装饰器,用于为文档生成可读的源代码。这些装饰器分析故事参数和组件元数据,以生成适合框架的代码示例。
Vue 源代码装饰器展示了复杂的代码生成过程
generateSourceCode 协调整个生成过程generatePropsSourceCode 处理属性绑定,支持 v-model 指令generateSlotSourceCode 为 slot 内容创建模板块parseDocgenInfo 提取组件元数据以进行准确的代码生成来源:code/renderers/vue3/src/docs/sourceDecorator.ts42-57 code/renderers/vue3/src/docs/sourceDecorator.ts64-106 code/renderers/vue3/src/docs/sourceDecorator.ts199-341
Vue 3 渲染器提供了与 Vue 的组合式 API 和响应式系统深度集成。它支持组件挂载、响应式参数更新以及复杂的源代码生成。
主要功能
globalThis.PLUGINS_SETUP_FUNCTIONS 注册 setup 函数updateArgs 进行响应式参数管理getSlots 函数处理 sloterrorHandler 集成错误边界React 渲染器专注于 JSX 生成和组件显示名称解析。它处理 React 特有的问题,如 forward refs、memo 组件和基于 Symbol 的组件。
主要功能
renderJsx 函数getReactSymbolNamemdxToJsx 进行 MDX 元素转换Angular 渲染器与 Angular 的模板系统集成,并提供基于组件元数据和模板分析的源代码生成。
主要功能
computesTemplateSourceFromComponent来源:code/renderers/vue3/src/render.ts21-33 code/renderers/react/src/docs/jsxDecorator.tsx39-51 code/frameworks/angular/src/client/docs/sourceDecorator.ts26-62
框架渲染器通过标准化的装饰器模式和事件系统与 Storybook 核心集成。源代码装饰器使用 emitTransformCode 函数将生成的源代码传回文档系统。
所有框架渲染器都实现了代码生成的一致性跳过逻辑
parameters.docs.source.type 为 SourceType.CODE,则跳过parameters.docs.source.code 提供了自定义源代码,则跳过SourceType.DYNAMIC),则跳过渲染器中的 shouldSkipSourceCodeGeneration 和类似函数在保持一致性的同时允许框架扩展。
来源:code/renderers/vue3/src/docs/sourceDecorator.ts116-128 code/renderers/react/src/docs/jsxDecorator.tsx205-217 code/renderers/html/src/docs/sourceDecorator.ts9-22