React Formik的isSubmitting不生效,无法控制按钮状态怎么解决
Formik isSubmitting 属性失效排查方案
- 首先检查
onSubmit回调是否正确处理异步逻辑:Formik 默认仅会在onSubmit执行完成后自动将isSubmitting重置为 false,如果你的提交逻辑包含异步操作(比如接口请求)但没有加async/await声明,Formik 会误判onSubmit已经执行完毕,立即把isSubmitting改回 false,导致看不到状态变化。
正确写法参考:
onSubmit: async (values, { setSubmitting }) => { try { // 异步提交逻辑,比如调用后端接口 await submitRequest(values) } finally { // 无论请求成功失败,手动重置提交状态 setSubmitting(false) } }
- 检查按钮是否正确绑定
isSubmitting属性:不要额外声明独立的 state 控制按钮状态,直接使用 Formik 实例暴露的isSubmitting即可,绑定写法如下:
<button type="submit" disabled={formik.isSubmitting} > {formik.isSubmitting ? '提交中...' : '提交'} </button>
- 检查是否在
onSubmit外的其他逻辑中手动调用setSubmitting覆盖了状态:如果提交过程中有其他操作修改了该状态,也会导致展示异常。 - 检查 Formik 版本是否为稳定正式版:2.0 以上的稳定版本不存在该属性的原生 bug,如果你使用的是老旧的 alpha、beta 测试版,建议升级到正式版规避兼容性问题。
内容的提问来源于stack exchange,提问作者Afzal Ali
相关产品推荐
相关产品推荐

