Formik onSubmit function is not working on my code

New*_*der 8 typescript reactjs formik

I am creating a form by using react and formik.Below is my code:

<div>
  <Formik
    initialValues={{
      email: ""
    }}
    onSubmit={(values: FState, setSubmitting: any) => {
      console.log("Enter in submit function", values);
      setTimeout(() => {
        alert(JSON.stringify(values, null, 2));
        setSubmitting(false);
      }, 500);
    }}
    validationSchema={validationSchemaGlobal}
  >
    {({
      errors,
      touched,
      handleBlur,
      handleChange,
      isSubmitting,
      values,
      handleSubmit
    }: any) => (
      <div>
        <Cards>
          <form onSubmit={handleSubmit}>
            <CardBody>
              <h4>
                Enter Your Email Address and we'll send you a link to reset your
                password
              </h4>
              <Field
                type="text"
                id="email"
                value={values.email}
                component={CustomInput}
                onChange={handleChange}
                onBlur={handleBlur}
              />
              {errors.email && touched.email ? (
                <div style={{ color: "red" }}>{errors.email}</div>
              ) : null}
            </CardBody>
            <CardFooter>
              <br />
              <button type="submit" disabled={isSubmitting}>
                Send Password Reset Link
                {/* {isSubmitting && <i className="fa fa-sponner fa-spin"/>} */}
              </button>
            </CardFooter>
          </form>
        </Cards>
      </div>
    )}
  </Formik>
</div>
Run Code Online (Sandbox Code Playgroud)

In this formik form, onSubmit function not working. I dont know why? Please tell me guys what is problem with my code?

Has*_*alp 20

在我的情况下,我Yup用作验证器,我不小心在我的要求中使用了firstNamelastNamevalidationSchema但我的表单中没有这些值。

我的validationSchema是,

const SignupSchema = Yup.object().shape({
  firstName: Yup.string()
    .min(2, 'Too Short!')
    .max(50, 'Too Long!')
    .required('Required'),
  lastName: Yup.string()
    .min(2, 'Too Short!')
    .max(50, 'Too Long!')
    .required('Required'),
  email: Yup.string()
    .email('Invalid email')
    .required('Required'),
  password: Yup.string()
    .min(6, 'Password must be at least 6 characters')
    .max(24, 'Password can be maximum 24 characters')
    .required('Required')
}) 
Run Code Online (Sandbox Code Playgroud)

我刚刚删除firstNamelastName

const SignupSchema = Yup.object().shape({
  email: Yup.string()
    .email('Invalid email')
    .required('Required'),
  password: Yup.string()
    .min(6, 'Password must be at least 6 characters')
    .max(24, 'Password can be maximum 24 characters')
    .required('Required')
})
Run Code Online (Sandbox Code Playgroud)

所以检查你的validationSchema,看看你是否需要你的表格中不存在的东西。

  • 你刚刚让我省了很多麻烦。谢谢 (2认同)
  • 我浪费了几个小时来解决这个问题。然后遇到了这个。谢谢 (2认同)

Bhu*_*ari 12

我从而不是导入Formreact-bootstrap所以formik我遇到了这个问题。Form通过导入的解决了该问题formik。有时,直接使用Form.Controlreact-bootstrap而不是Fieldformik也会出现这个问题。

如果你确实必须使用Form.Control你可以使用renderprop.


Chr*_*ris 8

检查您的validationSchema。我遇到了这个问题,发现我的验证器正在向Formik发送信号,表明该表单无效,但是没有其他警告或消息出现。它只是不会提交。

validator={() => ({})}仅返回一个空对象代替该道具。那应该通过验证并触发您的onSubmit。您可以从那里恢复功能。

  <Formik
    initialValues={{
      email: ""
    }}
    onSubmit={() => { console.log("submit!"); }}
    validator={() => ({})}
  >
    {/* */}
  </Formik>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢这解决了我的问题!我正在使用 Yup,并根据需要进行了额外的字段验证设置,该设置未链接到任何字段,因此它从未通过验证。 (5认同)
  • 应该有某种类型的通知。一点也不明显 (4认同)
  • @NickKinlen 建议也为我解决这个问题。为了弄清楚,我添加了这个来显示错误:`{!isValid &amp;&amp; JSON.stringify(errors)}` (2认同)

小智 6

最初的问题有点晚了,但我遇到了同样的问题,并且很容易解决,但很难找到。

当我将“name”属性传递给组件时,我写了“DateOfBirth”而不是小写,这意味着它与我的validationSchema不匹配。

我的架构如下所示:

export const userSchema = yup.object().shape({
firstName: yup.string().min(1).max(50).required('Field is required'), 
lastName: yup.string().min(1).max(50).required('Field is required'), 
dateOfBirth: yup.date().required('Invalid input'),});
Run Code Online (Sandbox Code Playgroud)

这意味着组件的名称必须匹配

之前(不起作用):

 <DateTimePicker name="DateOfBirth" label="Date of birth" />
Run Code Online (Sandbox Code Playgroud)

之后(工作):

<DateTimePicker name="dateOfBirth" label="Date of birth" />
Run Code Online (Sandbox Code Playgroud)


Ann*_*eva 5

就我而言,onSubmit不起作用,因为我忘记将表单包装在<form></form>标签中。这是一个愚蠢的问题,但这可能是这种行为的原因。如果上述解决方案不起作用,请检查您是否具有表单标记。