Formik提交尝试时所有字段touched被自动设为true触发异常警告问题
Formik 提交时全字段被标记为touched问题解决方案
- 检查提交回调内的
setTouched调用
很多开发者会在提交前为了展示全量校验错误,手动传入完整的字段对象给setTouched,如下方错误写法:
仅需传入你需要标记为touched的字段即可,不需要全量传入。const submitHandler = (values, actions) => { // 错误:传入了所有字段的touched配置 actions.setTouched({ name: true, phone: true, email: true }) // 提交逻辑 } - 检查Formik初始化配置
确认是否开启了validateOnMount配置项,该配置开启后会在组件挂载时自动将所有字段标记为touched并触发校验,将该配置设为false即可解决。 - 检查自定义输入组件的事件绑定
如果你自己封装了适配Formik的输入组件,确认是否在onChange/onBlur事件中错误调用了全局setTouched更新所有字段的touched状态,而非仅更新当前绑定字段的状态。 - 检查是否直接修改了touched状态
Formik的状态是immutable的,如果你直接通过formik.touched.xx = true的方式修改状态而非调用setTouched方法更新,会导致状态引用异常,意外将所有字段的touched值变为true。
内容的提问来源于stack exchange,提问作者Billies Wesley
相关产品推荐
相关产品推荐

