如何在页面上多次嵌入相同的 redux-form?

IT技术 reactjs redux redux-form
2021-04-06 18:23:56

我在尝试在一页上嵌入多个表单时遇到问题。我注意到configForm执行一次,即使页面上有多个表单,这就是为什么我不能动态生成不同的表单名称。

显示绑定在一起的多个文本字段的屏幕截图

function configForm(){
  const uuid = UUID.generate();

  const config = {
    form:`AddCardForm_${uuid}`,
    fields:['text'],
    validate:validate
  }

  return config;
}

export default reduxForm(configForm(), mapStateToProps, {togglePanelEditMode, addCardToPanel})(CardFormContainer);

如何添加表单,使它们的行为彼此独立?

1个回答

有两种方法可以在页面上多次嵌入同一个表单。

1. 使用formKey(Redux Form 5)

formKey是使用redux-form@5(或以下)时执行此操作的官方方法您必须从父项传递密钥以识别表单:

panels.map(panel =>
  <PanelForm key={panel.uuid} formKey={panel.uuid} initialValues={panel} />
                              ^^^^^^^ 
                       declare the form key
)

您的表单定义将是:

reduxForm({form: "AddCardForm", fields: ["text"], validate})

但是,此模式已从redux-form@6.

2. 使用唯一form名称(Redux Form 5 及以上)

以下模式是自 Redux Form 6 以来推荐的识别表单的方式。它与以前的版本完全兼容。

panels.map(panel =>
  <PanelForm key={panel.uuid} form={`AddCardForm_${panel.uuid}`} initialValues={panel} />
                              ^^^^ 
                    declare the form identifier
)

您的表单定义将是:

reduxForm({fields: ["text"], validate})
// No `form` config parameter here!
我注意到您写道,建议使用 >5 模式。这个很好的答案解决了我遇到的一个问题,但从未在任何地方的文档中看到过。你在哪里看到的?
2021-05-27 18:23:56
谢谢你。差点又问了这个问题……希望它出现在我的网络搜索中!!
2021-06-01 18:23:56
我不记得了。该文档说form:您的表单的名称以及您的表单状态将安装在 redux-form reducer 下的位置的关键由于您不想共享相同的数据,这就是要走的路。参见github.com/erikras/redux-form/issues/...
2021-06-07 18:23:56
哇这害死我好几个月了。我一直怀疑这一点,但文档从来没有说过,所以我一直认为,我们应该做的事情就是把方法form只在reduxForm({form:'blah'})(MyFormComponent)线路。绝对杀了我。这怎么没有记录。以及为什么还要费心去记录糟糕的方式。React 是关于可重用的组件,表单是可重用的,但是使用reduxForm({form:'blah'})()方法它变得不可重用对吗?如此误导 - redux-form.com/7.0.3/docs/api/ReduxForm.md/... - 它应该注意不可重用的后果
2021-06-14 18:23:56
谢谢。可以稍微澄清两个选项中的版本信息。我的建议:1. ...(Redux Form 5),2. ...(Redux Form 6+)
2021-06-16 18:23:56