描述bug
我认为这个bug是react-final-form和storybook实现的组合效应,可能是当装饰器包含一个使用渲染属性的组件时出现的问题。也有可能是完全与react-final-form有关的问题,但我在使用该库的其他上下文中从未遇到过这个问题。下面的示例重现了错误信息。通过交换装饰器的顺序,即先有final-form装饰器,后有div-wrapper装饰器,可以解决这个问题。
复现步骤
初始化CRA项目npx create-react-app example --template typescript
cd example
初始化storybooknpx sb init
安装final-form和react-final-formyarn add final-form react-final-form
在stories目录中添加以下故事
// Test.stories.tsx
import React from 'react'
//eslint-disable-next-line
import { Story, Meta } from '@storybook/react/types-6-0'
import { Form, Field } from 'react-final-form'
export default {
title: 'Test',
} as Meta
export const FinalFormTest = () => <Field name="test" component="input" />
const noop = () => {};
/**
* Change the order of these decorators to make maximum update depth
* exceeded error dissappear.
*/
FinalFormTest.decorators = [
(Story: Story) => (
<div>
<Story />
</div>
),
(Story: Story) => (
<Form onSubmit={noop}>
{({ handleSubmit }) => (
<form onSubmit={handleSubmit}>
<Story />
</form>
)}
</Form>
),
]
预期行为
装饰器不应该依赖于它们定义的顺序。希望能够在不引发异常的情况下将final-form装饰器包裹在div装饰器中。
系统信息
系统:
操作系统:macOS 10.15.6
CPU:(4) x64 Intel(R) Core(TM) i5-4670 CPU @ 3.40GHz
二进制文件:
Node: 14.8.0 - /usr/local/bin/node
Yarn: 1.22.4 - /usr/local/bin/yarn
npm: 6.14.7 - /usr/local/bin/npm
浏览器:
Chrome: 84.0.4147.135
Safari: 13.1.2
npm包:
@storybook/addon-actions: ^6.0.20 => 6.0.20
@storybook/addon-essentials: ^6.0.20 => 6.0.20
@storybook/addon-links: ^6.0.20 => 6.0.20
@storybook/node-logger: ^6.0.20 => 6.0.20
@storybook/preset-create-react-app: ^3.1.4 => 3.1.4
@storybook/react: ^6.0.20 => 6.0.20
6条答案
按热度按时间rvpgvaaj1#
大家好!最近似乎没有太多关于这个问题的进展。如果还有问题、评论或错误,请随时继续讨论。遗憾的是,我们没有时间处理每一个问题。我们始终欢迎贡献,所以如果你想帮忙,请发送一个pull request。30天后未活跃的问题将被关闭。谢谢!
hsgswve42#
你好,@slowselfip,我认为你是对的。你能解决这个问题吗?
@shilman 你和团队有机会深入研究这个问题吗?
我正在经历与
react-hook-form
相同的问题。我已经隔离了故事/故事以便于测试。在没有装饰器参与的情况下,将一个带有渲染属性的React组件嵌入到故事中是可以的。顺便说一下:非常感谢这个很棒的工具;-)
2w2cym1i3#
在你的装饰器中,尝试使用
{Story()}
代替<Story/>
?5kgi1eie4#
@gerardo-navarro 在你的装饰器中尝试使用
{Story()}
而不是<Story/>
?@shilman 谢谢你的快速回复。
不幸的是,它不起作用。方法
const { control } = useFormContext()
返回null
,这不应该考虑到FormProvider
被包裹在其中。既然返回了null
,以下代码会出错 =>TypeError: Cannot read property 'control' of null
还有其他想法吗?
ig9co6j15#
嗨,伙计们,我和其他装饰器也有同样的问题:
mwngjboj6#
我与
react-hook-form FormProvider
在Storybook的上一个版本中遇到了相同的问题顺便说一下,
SnackbarProvider
运行正常,不会出现任何错误但是从FormProvider的Angular 来看-它也作为
null
出现,就像之前的评论一样