如何仅验证ReduxForm中的可见字段

时间:2018-01-19 17:12:08

标签: reactjs redux-form

我有一个表单,根据另一个字段的值选择显示/隐藏某些字段。有没有什么方法可以只验证可见字段,因为它现在注册页面上的所有可用字段并生成错误,即使它们没有显示。

1 个答案:

答案 0 :(得分:0)

事实

  1. 我要说的是发生在redux-form 7.4.2

  2. 当Redux-Form表单中的字段“消失”时,将分派动作@@redux-form/UNREGISTER_FIELD

  3. 当Redux-Form形式的字段“出现”时,将启动@@redux-form/REGISTER_FIELD

行为

想象一下,第一次呈现表单时该字段不存在,因此该字段将不会出现在商店的registeredFields中。

registeredFields {
  someOtherField: {name: 'someOtherField', type : 'Field', count: 1} 
}

现在,您执行触发表单重新呈现的操作,该字段“出现”,redux表单调度@@redux-form/REGISTER_FIELD。现在,如果您查看商店,您将在registerFields下找到您的字段,如下所示:

registeredFields {
  someOtherField: {name: 'someOtherField', type : 'Field', count: 1}
  conditionalField: {name: 'conditionalField', type : 'Field, count: 1}
}

如果您做某事(单击一个复选框)导致该字段从表单中“消失”会发生什么?

redux-form将分派@@redux-form/UNREGISTER_FIELD,这是您的商店随后的样子:

registeredFields {
      someOtherField: {name: 'someOtherField', type : 'Field', count: 1}
      conditionalField: {name: 'conditionalField', type : 'Field, count: 0}
}

请注意,唯一更改的是count

您可以使用registeredFields通过connectUNREGISTER_FIELD连接到表单来判断该字段是否可见。

奇怪的是,当您“手动”分派dispatch字段操作(redux工具或带有registeredFields { someOtherField: {name: 'someOtherField', type : 'Field', count: 1} conditionalField: {name: 'conditionalField', type : 'Field, count: 1} } 的代码)时,整个密钥会像这样从商店中删除:

之前:

UNREGISTER_FIELD

“手动”调度 registeredFields { someOtherField: {name: 'someOtherField', type : 'Field', count: 1} }

之后
UserControl

我认为这是一个错误。我认为它应该具有相同的行为。我要在GitHub上提出一个问题。