问题:UNREGISTER_FIELD 不更新syncErrors

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

{
  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 版。

解答

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

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

通过这种方式,我的向导的状态被保留,但字段值和syncErrors在卸载字段时被清除。你可以在这里找到一个沙箱

Logo

React社区为您提供最前沿的新闻资讯和知识内容

更多推荐