首页 > 解决方案 > 表单提交后如何取消 react-final-form 验证?

问题描述

在提交更新现有值的表单时,我分派了一个 redux 操作创建者。

<Form onSubmit={onFormSubmit} destroyOnUnregister>
  {({dirty, invalid, handleSubmit}) =>
    ...
    <Button 
      onClick={handleSubmit} 
      disabled={invalid || !dirty}>
        Save
    </Button>
  }

当后端收到表单值时,服务器以更新的数据进行响应,react-final-form 将其解释为提交错误(invalid来自 react-final-form 的 prop 保持不变true,即使表单已成功提交)。我怎样才能防止这种行为?

我一次只更新一个字段,即name在提交表单时,但服务器响应包含整个数据片段以更新 redux 存储)。我得到的验证错误是:

"submitErrors": {
  "data": {
    "id": 1,
    "name": "Company 1",
    "country": "USA",
    "city": "New York",
    ...
    ...
    "createdAt": "2020-08-06",
    "updatedAt": "2020-08-06",
    "deletedAt": null
  },
  "type": "company/UPDATE_INFO_SUCCESS"
}

请注意,该company/UPDATE_INFO_SUCCESS操作已被触发。

我确实在有关表单提交的文档中看到了以下部分

3. 与 Promise 异步返回一个 Promise<?Object>,它在成功时解析为没有值,或者在失败时解析为提交错误的对象。它解决错误的原因是在出现服务器或通信错误时留下拒绝。

但这种行为是非常不可取的。

标签: redux-formreact-final-formfinal-form

解决方案


推荐阅读