You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Storybook 7的MDX中渲染嵌套Vue组件?

在Storybook 7的MDX中正确加载嵌套Vue组件的方法

问题背景

单个Vue组件能在Storybook 7的MDX文档中正常展示,但使用包含<Tab>子组件的<Tabs>组件时,出现React.createElement类型错误,提示“expected a string or a class/function but got: object”。

报错原因

Storybook 7的MDX文档页面默认基于React环境渲染,直接在MDX中书写Vue组件标签会被React解析器错误处理,导致组件类型不匹配。

正确实现方式

方式一:使用Canvas+Story包裹Vue组件

通过<Canvas>和<Story>组件提供Vue渲染上下文,在Story的返回函数中定义Vue组件和模板:

import { Canvas, Meta, Story } from '@storybook/blocks';
import * as TabsStories from './Tabs.stories';
import Tabs from "@/components/tabs/Tabs.vue";
import Tab from "@/components/tabs/Tab.vue";

<Meta of={TabsStories}/>

<Canvas>
  <Story name="嵌套Tabs示例">
    {() => ({
      components: { Tabs, Tab },
      template: `
        <Tabs selectedKey="component">
          <Tab key="component" label="Test">
            <div>Content</div>
          </Tab>
        </Tabs>
      `
    })}
  </Story>
</Canvas>

方式二:复用已定义的Vue故事

如果已经在Tabs.stories.js中写好带嵌套子组件的故事,直接在MDX中引用即可:

import { Canvas, Meta, Story } from '@storybook/blocks';
import * as TabsStories from './Tabs.stories';

<Meta of={TabsStories}/>

<Canvas>
  <Story of={TabsStories.NestedTabs} />
</Canvas>

关键说明

  • 不要直接在MDX的顶层写Vue组件标签,必须放入<Canvas>内部的<Story>中,确保由Vue渲染器处理组件。
  • 确保Vue组件的导出为默认导出(即export default Tabs),避免导入时获取到错误的对象类型。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:17:43