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

Posted

技术标签:

【中文标题】如何在页面上多次嵌入相同的 redux-form?【英文标题】:How to embed the same redux-form multiple times on a page? 【发布时间】:2016-09-24 04:51:30 【问题描述】:

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

Screenshot showing multiple text fields bound together.

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!

【讨论】:

谢谢。差点又问了这个问题……希望它出现在我的网络搜索中! 谢谢。可以稍微澄清一下两个选项中的版本信息。我的建议:1. ...(Redux Form 5),2. ...(Redux Form 6+) 我注意到您写道,推荐使用 >5 模式。这个很棒的答案解决了我遇到的一个问题,但从未在任何地方的文档中看到过。你在哪里看到的? 我不记得了。文档说 form: 你的表单的名称和你的表单状态将被挂载到 redux-form reducer 下的键。由于您不想共享相同的数据,这就是要走的路。见github.com/erikras/redux-form/issues/… 哇,这让我死了好几个月。我一直怀疑这一点,但文档从未说明过,所以我一直认为我们应该做的事情是把 form 放在 reduxForm(form:'blah')(MyFormComponent) 行中。绝对杀了我。这怎么没有记录。以及为什么还要费心记录不好的方式。 React 是关于可重用组件的,表单是可重用的,但是使用 reduxForm(form:'blah')() 方法它变得不可重用对吗?如此误导 - redux-form.com/7.0.3/docs/api/ReduxForm.md/… - 它应该注意没有可重用性的后果

以上是关于如何在页面上多次嵌入相同的 redux-form?的主要内容,如果未能解决你的问题,请参考以下文章

如何在一个页面中多次组合相同的小部件

Vue.js:在页面中多次包含相同的组件实例

如何根据浏览器在同一页面上嵌入 32 位或 64 位 ActiveX 控件?

浅谈redux-form在项目中的运用

如何将 redux-form 绑定连接到表单的输入

React+redux-form - 提交后重定向