【问题标题】:Formik `isSubmitting` and `isValidating` are `false` during pre-submit validationFormik `isSubmitting` 和 `isValidating` 在预提交验证期间为 `false`
【发布时间】:2021-11-19 06:04:02
【问题描述】:

我正在使用 Formik 提交表单。我希望验证逻辑略有不同,具体取决于它是由模糊/更改事件触发还是提交前验证触发。 (长话短说,在预提交期间,我只想运行同步验证——我的后端将执行我在提交表单时在模糊/更改上运行的相同异步验证,所以我想在预提交中跳过它.) 我的验证函数看起来像这样:

  validate={(value) => {
    const error = validateSync(value);
    if (!error && !form.isSubmitting) {
      return validateAsync(value);
    }
    return error;
  }}

在这种情况下,我使用useFormikContext 来获取form.isSubmitting

根据提交时的Formik docsisSubmitting 应在 Pre-submit 阶段,Validation 阶段之前立即设置为true。这似乎没有发生,因为您可以看到您是否尝试在 this sandbox 中提交表单(检查控制台以查看 isSubmittingisValidating 都是 false - 根据 Formik 文档,在这个阶段他们都应该是true)。

另一个用户有一个similar question,但答案没有解决 Formik 的潜在(可能)错误。

【问题讨论】:

    标签: javascript reactjs forms formik


    【解决方案1】:

    使用 React 的 useRef 钩子来引用当前版本的表单:

    const form = useFormikContext();
    const formRef = useRef();
    formRef.current = form;
    
    // within a delayed callback:
    function delayedCallback() {
      // pulls the current value of isSubmitting, whenever the delayedCallback fires
      const { isSubmitting } = formRef.current;
    };
    

    100% 有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2021-11-03
      • 2020-09-05
      • 2021-03-08
      • 2017-04-27
      • 1970-01-01
      相关资源
      最近更新 更多