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
相关产品推荐
相关产品推荐

