You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Formik手动调用validateForm后then回调内errors为空异常问题

问题原因

你遇到的问题核心是对validateForm的返回逻辑和Formik状态更新的异步性认知偏差:

  • Formik 组件上下文中获取的errors是响应式状态变量,调用validateForm触发校验后,状态更新需要等待组件重渲染才会生效,你在then回调中直接取当前闭包缓存的旧errors变量,拿到的自然是校验前的空对象。
  • validateForm执行后返回的 Promise 会直接 resolve 最新的校验错误结果,不需要依赖组件状态里的errors变量。
修复方案

直接从then回调的入参中获取校验返回的错误对象即可,修改后的代码如下:

<Button type="button" disabled={isSubmitting} 
        onClick={() => {
            validateForm().then((newErrors) => {
                // 直接使用回调返回的最新错误对象
                if ('startDate' in newErrors || 'expirationDate' in newErrors) {
                    // 后续逻辑
                }    
            }); 
}}
/>
补充说明

你配合Submit控件使用时校验功能正常,是因为Submit触发的校验流程会先完成状态更新再执行提交回调,回调里拿到的已经是重渲染后的最新errors状态,和手动调用validateForm的执行时序存在差异。

内容的提问来源于stack exchange,提问作者gene b.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:54:03