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

Kyl*_*yle 28 reactjs redux redux-form

我试图在一个页面上嵌入多个表单时遇到问题.我注意到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);
Run Code Online (Sandbox Code Playgroud)

如何添加表单以使它们彼此独立?

Flo*_*ent 57

有两种方法可以在页面上多次嵌入相同的表单.

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
)
Run Code Online (Sandbox Code Playgroud)

您的表单定义是:

reduxForm({form: "AddCardForm", fields: ["text"], validate})
Run Code Online (Sandbox Code Playgroud)

但是这种模式已被删除redux-form@6.

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

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

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

您的表单定义是:

reduxForm({fields: ["text"], validate})
// No `form` config parameter here!
Run Code Online (Sandbox Code Playgroud)

  • 哇这几个月都在杀了我.我总是怀疑这一点,但是文档从未说过,所以我一直认为我们应该做的事情只是在`reduxForm({form:'blah'})(MyFormComponent)`行中放置`form`.绝对杀了我.为什么没有记录.为什么甚至打扰记录坏方法.React是关于可重用的组件,表单是可重用的,但是使用`reduxForm({form:'blah'})()`方法它变得不可重复正确吗?如此误导 - http://redux-form.com/7.0.3/docs/api/ReduxForm.md/#-code-form-string-code-required - 它应该注意到不可重复性的共同点 (4认同)
  • 谢谢.两个选项中的版本信息可以稍微澄清一下.我的建议:1.......(Redux Form 5),2.......(Redux Form 6+) (2认同)