我正在尝试为我的react-realy
应用创建一个 storybook ,但我不知道如何为该组件设置模型数据。对于简单的组件,它是可以的,因为我可以使用虚拟UI组件与容器方法,但我不能将它用于嵌套中继组件,例如有一个UserList
组件,我想添加到 storybook ,我可以将继电器片段部分拆分到容器和UI部分到组件,但如果UserList
个孩子太中继组件怎么办?当它们是UserList
的构成的一部分时,我不能分开它们吗?
是否有一些解决方案可以为故事书添加中继组件?
答案 0 :(得分: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
。
不仅如此,它还需要最少的编码,您无需在查询中添加 @relay-test-operation
指令,并且使用 faker.js 自动为您生成模拟数据,允许您专注于重要的事情,即构建出色的用户界面。
如果您想实现类似的东西,请随时查看此处的源代码:https://github.com/richardguerre/use-relay-mock-environment。
注意:它还处于早期阶段,所以有些事情可能会发生变化,但希望得到一些反馈!
我还创建了 relay-butler,这是一个 CLI,它接收 GraphQL 片段并输出中继组件,包括一个包装片段组件的自动生成的查询组件,以及 Storybook 故事(Default
和Loading
默认情况下)包装该查询组件。并且在几分钟内,我可以创建漂亮的 Relay 组件,这些组件在 Storybook 中被“记录”。
也希望得到一些反馈!