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

React Context装饰器导致Storybook中Header组件故事消失问题

问题诊断与解决办法

可能原因1:fakeAuthData() 函数执行出错

如果fakeAuthData()调用时抛出错误(比如未正确导出、内部逻辑报错),会导致装饰器渲染失败,Storybook无法正常加载该故事,直接从列表中隐藏。

解决步骤:

  • 先用静态测试数据替换fakeAuthData()验证:
    Beep.decorators = [
      (Story) => (
        <AuthContext.Provider value={{ user: { id: '1', name: 'Test User' }, isAuthenticated: true }}>
          <Story />
        </AuthContext.Provider>
      ),
    ];
    
  • 如果替换后故事正常显示,说明fakeAuthData()存在问题,检查该函数实现,确保返回与AuthContext预期结构一致的数据。

可能原因2:上下文与路由的嵌套顺序错误

Header组件可能同时依赖AuthContext和Router的上下文,当前模板中Router在装饰器的Provider内部,若组件要求AuthContext在Router外层才能工作,会导致渲染异常。

调整方案:
将Router移到装饰器内部,确保AuthContext.Provider包裹Router:

// 简化Template为基础结构
const Template: ComponentStory<typeof Header> = (args) => <Header {...args} />;

// 在装饰器中同时提供所需上下文
Beep.decorators = [
  (Story) => (
    <AuthContext.Provider value={fakeAuthData()}>
      <Router>
        <Story />
      </Router>
    </AuthContext.Provider>
  ),
];

可能原因3:类型不匹配导致编译错误

如果fakeAuthData()返回的数据类型与AuthContext定义的类型不一致,TypeScript编译错误可能导致Storybook无法加载该故事(部分场景下不会显示错误提示,直接隐藏故事)。

检查步骤:

  • 查看AuthContext的类型定义,比如:
    export const AuthContext = createContext<{
      user: User | null;
      isAuthenticated: boolean;
    }>({ user: null, isAuthenticated: false });
    
  • 确保fakeAuthData()返回的对象完全匹配上述类型,无缺失属性或类型不兼容情况。

可能原因4:Storybook版本兼容性问题

若使用的Storybook版本较旧,故事级别装饰器的写法可能存在兼容性问题。

验证方式:
将装饰器移到组件元数据的全局配置中测试:

export default {
  title: 'Header',
  component: Header,
  parameters: {
    layout: 'fullscreen',
  },
  // 全局装饰器(该组件所有故事都会应用)
  decorators: [
    (Story) => (
      <AuthContext.Provider value={fakeAuthData()}>
        <Router>
          <Story />
        </Router>
      </AuthContext.Provider>
    ),
  ],
} as ComponentMeta<typeof Header>;

// 简化Template
const Template: ComponentStory<typeof Header> = (args) => <Header {...args} />;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:47:32