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

如何在Formik中同时实现表单提交验证与字段级验证?

在Formik中实现提交全字段验证+字段变更单字段验证

你可以通过手动调用Formik的validateField方法来实现字段变更时仅验证当前字段,同时保留提交时的全字段验证逻辑,具体修改方式如下:

核心思路

保持validateOnChange={false}避免全局字段变更时的全量验证,同时在目标字段的onChange事件中,先完成字段值的更新,再手动触发当前字段的单独验证。

修改后的完整代码

return (
  <div className='add-member'>
    <h1>Register a new member</h1>
    <Formik
      validationSchema={validationSchema}
      validateOnBlur={false}
      validateOnChange={false} // 保持关闭全局字段变更验证
      initialValues={{ name: ''}}
      onSubmit={() => {
        console.log('something')
      }}
    >
      {/* 从Formik的render props中获取需要的方法 */}
      {({errors, validateField, handleChange}) => (
        <Form>
          <div className='member-info'>
            <div className='title'><p>Info</p></div>
          
            <div className='input' id='name-input'>
              <label>Name</label>
              <Field 
                name='name' 
                placeholder={errors.name ? '*Required' : null} 
                className={errors.name ? 'input-error' : ''}
                {/* 自定义onChange逻辑:先更新字段值,再验证当前字段 */}
                onChange={(e) => {
                  handleChange(e);
                  validateField('name');
                }}
              />
            </div>
          </div>
          {/* 补充提交按钮,确保表单可提交 */}
          <button type="submit">Submit</button>
        </Form>
      )}
    </Formik>
  </div>
)

逻辑说明

  • 关闭validateOnChange后,Formik不会在任意字段变更时自动验证所有字段
  • handleChange维持Formik默认的字段值更新逻辑,保证表单状态正常同步
  • validateField('name')仅针对当前字段触发验证,只会更新该字段对应的errors状态
  • 提交表单时,Formik会自动通过配置的validationSchema验证所有字段,满足提交时全量验证的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:23:18