useOf
Storybook 提供的默认块无法满足所有用例,因此您可能需要编写自己的块。
如果您的自定义文档块需要与 Storybook 的注释(即故事、元数据或组件)交互,您可以使用 useOf
钩子。传入故事、元数据或组件的模块导出,它将返回其带注释的形式(应用了参数、参数、加载器、装饰器、播放函数),然后您可以将其用于任何您想要的目的。事实上,大多数现有的块,如 Description
和 Canvas
,在幕后都使用了 useOf
。
以下是如何使用 useOf
钩子创建自定义块来显示故事名称的示例
useOf
类型
参数
moduleExportOrType
(**必填**)
类型:ModuleExport | 'story' | 'meta' | 'component'
提供故事导出、元数据导出、组件导出或 CSF 文件导出,从中获取注释。
当自定义块位于 附加文档 中时,还可以通过传入字符串来获取主(第一个)故事、元数据或组件。这用作回退,因此可以在块中省略 of
属性。最常见的模式是将其用作 useOf(props.of || 'story')
,如果未定义 of
属性,则将回退到主故事。
useOf('story')
在附加模式下返回带注释的主故事;在非附加模式下返回错误useOf('meta')
在附加模式下返回带注释的元数据;在非附加模式下返回错误useOf('component')
在附加模式下返回元数据中指定的带注释的组件;在非附加模式下返回错误
validTypes
类型:Array<'story' | 'meta' | 'component'>
可以选择指定一个您的块接受的有效类型的数组。传递任何不是有效类型的内容都会导致错误。例如,Canvas
块使用 useOf(of, ['story'])
,它确保它只接受对故事的引用,而不是元数据或组件。
返回值
返回值取决于匹配的类型。
EnhancedResolvedModuleExportType['type'] === 'story'
类型:{ type: 'story', story: PreparedStory }
对于故事,带注释的故事按原样返回。它们已准备就绪,这意味着它们已与项目和元数据注释合并。
EnhancedResolvedModuleExportType['type'] === 'meta'
类型:{ type: 'meta', csfFile: CSFFile, preparedMeta: PreparedMeta }
对于元数据,会返回解析后的 CSF 文件,以及准备好的带注释的元数据。也就是说,项目注释与元数据注释合并,但没有故事注释。
EnhancedResolvedModuleExportType['type'] === 'component'
类型:{ type: 'component', component: Component, projectAnnotations: NormalizedProjectAnnotations }
对于组件,会返回组件以及项目注释;没有元数据或故事注释。
请注意,钩子通常无法确定是否传递了组件或任何其他对象,因此它的行为也类似于 unknown
类型。