一个项目工程里的组件,很可能需要依赖于某些项目顶层定义的 Provider
才能正确使用。比如,mobx 的项目可能会在顶层通过 mobx-react
中的 Provider
提供 store
参数。
如果需要在每一个 story 中都写:
<Provider {...info}>
<ComponentForThisStory />
</Provider>
显然太啰嗦了。
storybook 提供了全局定义 decorator 的方法,可以以此来注册一些全局都用得到的改动。举例如下:
import { configure, addDecorator } from '@storybook/react';
import { Provider } from 'mobx-react';
function withProvider(story) {
return <Provider {...info}>{story()}</Provider>
}
function loadStories() {
// ...
addDecorator(withProvider);
// ...
}
configure(loadStories, module);
这样,在 story 中,只需要简单的提供组件就可以了,decorator
会自动为组件加上合适的外层 Provider
。