global Provider for storybook

JavaScript

一个项目工程里的组件,很可能需要依赖于某些项目顶层定义的 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

参考文档