storybook 在装饰器中添加的上下文变成了两个示例,

jgzswidk  于 3个月前  发布在  其他
关注(0)|答案(2)|浏览(35)

描述问题

目前,我们正在运行一个使用React和TypeScript的monorepo设置,文件结构如下:

.storybook
apps
  - app-which-uses-ui-components
  - app-which-doesnt-use-ui-component
packages
  - ui-components
  - package-which-uses-ui-components
  - package-which-doesnt-use-ui-component

几乎所有我们的包/应用都使用我们的 ui-components -package,那些没有使用它的包/应用不会受到影响,如果它们被包裹在我们全局的 ThemeProvider(由 ui-components 包暴露)中。

这是我们的设置的样子:

preview.js

import {
  GlobalStyle,
  Fonts,
  RootThemeProvider,
} from "../packages/ui-components";

export const decorators = [
  (Story) => (
    <RootThemeProvider>
      <Fonts />
      <GlobalStyle />
      <Story />
    </RootThemeProvider>
  ),
];

一切都正常,我们可以轻松地在每个应用/包中创建一个故事,除了 ui-components -package本身定义的一些故事。其中一些故事使用了由上下文提供的帮助功能,该上下文在 RootThemeProvider 中呈现。

我进行了一些调查,似乎当 preview.js 导入 RootThemeProvider 时,它会从该包的 dist -文件夹中获取预编译版本,但是当故事尝试消费上下文时,它会尝试找到由storybook编译创建的上下文(这在组件树中不存在)。

所以这是一个有点复杂的情况,但我的用例是否受支持?或者我应该尝试将装饰器的职责更接近于故事定义?缺点是,我需要在每个故事中定义那个装饰器,这会很麻烦。我真的希望能够在不知道整个storybook设置实现细节的情况下创建一个故事。

zvokhttg

zvokhttg1#

我不明白这个问题,但我会把这个留在这里,以防它有帮助:
https://storybook.js.org/docs/react/workflows/storybook-composition
这将允许您创建两个或更多独立的故事书。拆分故事书的好处是,可以根据需要单独为每个项目定制配置。然后Composition将允许您从单个URL查看它们。希望这有所帮助!

ioekq8ef

ioekq8ef2#

我们在设置中遇到了相同的问题。上面的帖子中的链接似乎在这里 - https://storybook.js.org/docs/react/sharing/storybook-composition ,但组合似乎并不是真正的问题。它完全像OP描述的那样。当尝试在工作区之间使用上下文时,会创建重复项,并且useContext钩子(即使在同一故事中)不会看到相同的引用,这取决于如何导入这些钩子(即相对于故事还是来自不同的工作区)。

相关问题