Formik的handleSubmit无响应,同实现的两个表单组件仅一个正常工作
你打印的这段onSubmit.toString()输出是Formik的正常内部实现:Formik会把用户传入的onSubmit回调存储在ref中,调用时直接转发参数到ref指向的实际回调,目的是避免onSubmit引用变化触发下游组件不必要的重渲染,这段代码本身没有问题,不是故障诱因。
以下是对应的故障排查方案:
1. 排查表单校验拦截
Formik默认会在提交前执行全量字段校验,只要存在任意校验错误(即Formik实例的isValid属性为false),handleSubmit就会直接终止,不会触发你传入的自定义onSubmit回调。
排查操作:
- 提交时打印Formik实例的
errors对象,确认是否存在未展示的隐藏字段校验错误 - 检查校验规则逻辑,是否存在异步校验未正确resolve、校验逻辑错误没有抛出可视化提示但确实返回了错误字段的情况
2. 排查提交事件绑定问题
- 确认提交按钮的type属性为
type="submit",如果误写为type="button",点击不会触发表单原生submit事件 - 如果你使用箭头函数包裹
handleSubmit调用,必须传入事件对象:onSubmit={(e) => formik.handleSubmit(e)},漏传事件参数会导致handleSubmit内部逻辑中断 - 检查表单上层元素是否绑定了
e.stopPropagation()或e.preventDefault(),拦截了submit事件的冒泡
3. 排查Formik实例绑定错误
确认你绑定到form标签的handleSubmit确实来自当前表单对应的Formik实例,排查是否存在变量名拼写错误(例如小写的handlesubmit)、多Formik实例作用域混淆、实例透传时ref丢失的问题。
4. 排查自定义回调逻辑问题
在你传入Formik的onSubmit回调第一行添加打印逻辑,确认是否是回调内部的前置判断逻辑提前return,导致你误认为回调没有被触发。
内容的提问来源于stack exchange,提问作者Chris Haupt
相关产品推荐
相关产品推荐

