3

我正在尝试为我的应用程序创建一个故事书react-realy,但我不知道如何为该组件设置模型数据。对于简单的组件是可以的,因为我可以使用虚拟 UI 组件与容器的方法,但我不能将它用于嵌套的中继组件,例如有一个UserList组件,我想添加到故事书中,我可以拆分中继片段部分到容器,UI 部分到组件,但是如果UserList子组件太中继组件怎么办?当它们是组合的一部分时,我不能拆分它们UserList

是否有一些解决方案可以将继电器组件添加到故事书中?

4

1 回答 1

0

我创建了一个名为use-relay-mock-environment的 NPM 包,它基于relay-test-utils它允许您使用 Relay 组件制作 Storybook 故事。

它允许嵌套 Relay 组件,因此您实际上可以为由 Relay 组件组成的整个页面制作故事。这是一个例子:

// MyComponent.stories.(js | jsx | ts | tsx)
import React from 'react';
import { RelayEnvironmentProvider } from 'react-relay';
import createRelayMockEnvironmentHook from 'use-relay-mock-environment';
import MyComponent from './MyComponentQuery';

const useRelayMockEnvironment = createRelayMockEnvironmentHook({
  // ...Add global options here (optional)
});

export default {
  title: 'MyComponent',
  component: MyComponent,
};

export const Default = () => {
  const environment = useRelayMockEnvironment({
    // ...Add story specific options here (optional)
  });

  return (
    <RelayEnvironmentProvider environment={environment}>
      <MyComponent />
    </RelayEnvironmentProvider>
  );
};

export const Loading = () => {
  const environment = useRelayMockEnvironment({
    forceLoading: true
  });

  return (
    <RelayEnvironmentProvider environment={environment}>
      <MyComponent />
    </RelayEnvironmentProvider>
  );
};

您也可以添加<RelayEnvironmentProvider />为装饰器,但如果您想为不同的状态/模拟数据创建多个故事,我建议不要这样做。在上面的例子中,我展示了 2 个故事,Default一个和Loading一个。

不仅如此,它需要最少的编码,您不需要将指令添加到查询中,并且使用faker.js@relay-test-operation为您自动生成模拟数据,让您专注于重要的事情,从而构建出色的 UI .

如果您想实现类似的东西,请随时在此处查看源代码:https ://github.com/richardguerre/use-relay-mock-environment 。

注意:它仍处于早期阶段,所以有些事情可能会改变,但希望得到一些反馈!


我还创建了relay-butler,这是一个 CLI,它接收 GraphQL 片段并输出 Relay 组件,包括一个包装片段组件的自动生成的查询组件,以及包装该查询组件的 Storybook 故事(默认情况下为Defaultand Loading)。从字面上看,我可以在几分钟内创建漂亮的 Relay 组件,并在 Storybook 中“记录”。

也希望得到一些反馈!

于 2021-07-25T14:04:50.527 回答