UNREGISTER_FIELD不会更新syncErrors

时间:2017-07-16 11:04:41

标签: reactjs redux redux-form

我使用redux-form作为我的向导,我有一些字段可以显示/隐藏,具体取决于其他字段值。当它们被渲染时,它们是必需的,但当然如果它们是隐藏的,则应该避免验证。 我注意到,在首次显示(并且需要)然后隐藏它们的情况下,UNREGISTER_FIELD被调用但syncErrors未被更新,并且仍然包括刚刚取消注册的字段无效;这是行动

{
  type: '@@redux-form/UNREGISTER_FIELD',
  meta: {
    form: 'registerAccommodationForm'
  },
  payload: {
    name: 'property.breakfastPrice',
    destroyOnUnmount: false
  }
}

这是这个状态(没有改变):

 form: {
    registerAccommodationForm: {
      syncErrors: {
        property: {
          breakfastPrice: 'Required'
        }
      },

我的表单以这种方式初始化:

FormPropertyDetails = reduxForm({
  form: 'registerAccommodationForm',
  destroyOnUnmount: false,
})(FormPropertyDetails);

这是正常行为吗?当字段取消注册时,是否不应更新验证?如何显示/隐藏动态字段时如何触发syncErrors的更新? 我使用的是6.7.0版。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,我只需要在表单初始化中添加forceUnregisterOnUnmount: true

FormPropertyDetails = reduxForm({
  form: 'registerAccommodationForm',
  forceUnregisterOnUnmount: true,
  destroyOnUnmount: false,
})(FormPropertyDetails);

以这种方式保留了向导的状态,但是在卸载字段时会清除字段值和syncErrors。您可以找到沙箱here