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

Formik setFieldValue状态更新延迟(滞后一次渲染)问题排查

问题原因

Formik的setFieldValue是异步更新表单状态的,你在调用setFieldValue后立即执行submitForm,此时表单状态还未完成更新,所以提交时method仍为初始值manual。

解决方案

利用setFieldValue的第三个参数(回调函数),该回调会在字段值更新完成后执行,确保提交时能拿到最新的表单值:

修改GoogleLogin的onSuccess回调代码:

<GoogleLogin
  onSuccess={(response) => {
    setFieldValue("method", "google", () => {
      setFieldTouched("method", true);
      submitForm();
    });
  }}
  onError={() => {}}
></GoogleLogin>
额外说明

你之前使用setTimeout的方式属于临时hack,依赖事件循环延迟,稳定性不足。而setFieldValue的回调是Formik官方提供的状态更新完成后的钩子,能可靠保证操作顺序。

内容的提问来源于stack exchange,提问作者Charles Semaan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:10:08