Storybook中如何为组件注入全局Context Provider?
我在用Storybook写一个按钮组件的Story时,发现组件依赖项目里的AuthContext,但Storybook运行时报错找不到Context值。我试过在.stories.jsx里用addDecorator包裹,但控制台还是报同样的错,应该怎么正确注入全局Provider呢?
我尝试在预览面板配置了这样的装饰器:
import { AuthProvider } from '../context/AuthContext';
addDecorator(
withParameters({
decorators: [(story) => <AuthProvider><story /></AuthProvider>]
})
);
但控制台依然显示:
Warning: Failed Context Consumption
Cannot read properties of undefined (reading 'user')
难道Storybook的Provider注入方式和常规React应用不同?有没有更好的实现方法?
更好的做法是直接在preview.js里全局注入,这样所有stories都能用。试试这样:
注意几点:
1. 确保preview.js在.storybook目录下
2. 直接用export的decorators数组,不是用addDecorator
3. 新版本Storybook推荐这种写法
如果还报错,可能是你的AuthContext初始化有问题,可以加个fallback值:
我上次调试这个浪费了半小时,最后发现是Provider的初始状态没处理好...(捂脸)
withParameters不是用来包裹组件的,应该直接用addDecorator。试试这样写:如果还是不行,检查下
AuthContext里是否正确初始化了默认值,Storybook环境需要明确的defaultValue,不然会报undefined。改下你的context创建代码: