首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在final- form -arrays中为数组提供initialValues会导致状态更改重置整个表单,如何防止这种情况?

在final- form -arrays中为数组提供initialValues会导致状态更改重置整个表单,如何防止这种情况?
EN

Stack Overflow用户
提问于 2019-06-05 13:35:27
回答 2查看 2.5K关注 0票数 4

我有一个使用最终形式数组的表单。表单和验证工作正常,但是,当我在组件内部进行状态更改时,它会重置我的所有值。

我能够用react-final-form-arrays提供的相同示例复制这个问题:

https://codesandbox.io/embed/react-final-form-field-arrays-om6p6

我添加了一个按钮来切换状态更改。本质上,只需尝试在表单中填充值,然后更改状态。表单将会重置,但我不明白为什么会这样。如果删除initialValues,则不会发生这种情况。

有人知道为什么会这样吗?

EN

回答 2

Stack Overflow用户

发布于 2019-06-05 14:57:17

2个问题。

  1. 您正在向Form组件传递一个内联renderProp,这意味着它会在您的组件每次呈现时创建一个新函数,这会导致您的form重置。解决方案是将renderProp移动到上面的一个函数中,并传入该函数,理想情况下,使用useCallback.
  2. Once进行记忆修复后,表单仍然会重置。这是因为您正在将一个内联数组传递给initialValues。这也会在你的组件每次渲染时创建一个新的数组,这会重置你的表单。将其移动到变量中并传入。

这是一个非常常见的初学者错误,你应该仔细阅读react是如何进行引用相等检查的,以确定要重新呈现哪些组件。

固定版本:https://codesandbox.io/embed/react-final-form-field-arrays-c6hgu

票数 3
EN

Stack Overflow用户

发布于 2020-03-13 16:33:14

只需记住箭头函数中的initialValues,然后将其传递给表单组件:

代码语言:javascript
复制
const initialValues = useCallback(() => {
    return {data: [{}]};
    // eslint-disable-next-line react-hooks/exhaustive-deps
}, []);

将该函数作为表单组件的initialValues属性传递。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56454736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档