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

如何配置Formik仅在表单提交时展示校验错误

解答

Formik 原生支持这个配置,不需要额外写复杂自定义逻辑,两步调整就能实现仅提交时展示校验错误的效果:

  • 第一步是关闭默认的实时校验触发。Formik 默认会在输入框内容变化、输入框失焦时跑全量校验,这就是你刚点第一个输入框,其他空字段全出错误的原因。在 <Formik> 组件上加两个属性关掉这两个默认触发逻辑就行:
<Formik
  initialValues={initialValues}
  validationSchema={OrderFormSchema}
  validateOnBlur={false}
  validateOnChange={false}
  onSubmit={(values) => { onSubmit(values) }}
>
  • 第二步是调整错误提示的渲染判断。你现在的代码只要errors里有对应字段的错误就直接渲染样式,需要把Formik提供的submitCount(表单提交触发次数)也拿出来做判断,只有用户至少点过一次提交(submitCount > 0)的时候,才展示对应字段的错误,参考写法:
{({ errors, submitCount }) => (
  <Form>
    {/* 单字段示例,其余字段复用相同判断逻辑 */}
    <div className="form-item">
      <Field name="lastname" />
      {submitCount > 0 && errors.lastname && (
        <span className="error-tip">{errors.lastname}</span>
      )}
    </div>
    {/* 其余表单内容 */}
    [...]
  </Form>
)}
</Formik>

可选优化:如果你想实现「第一次点提交前完全不弹错误,提交之后用户修改字段时实时更新该字段的错误提示」的效果,不需要把validateOnBlur和validateOnChange设为false,保持默认值即可,只要错误渲染时保留submitCount > 0的前置判断就行。这种模式下提交后用户改内容会自动校验更新提示,也不会出现提交前随便点输入框就全量报错的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:39:19