微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Formik 表单未提交和 reCAPTCHA 错误消息不断弹出

如何解决Formik 表单未提交和 reCAPTCHA 错误消息不断弹出

我正在做这个项目。在我添加 React reCAPTCHA 之前,表单可以正常工作,但是现在,表单没有提交,并且 reCAPTCHA 在被检查并点击提交按钮后一直显示错误消息。

代码如下:

 

    const validationSchema = yup.object().shape({
        name: yup.string().required('Your name is required.'),email: yup.string().email('Please enter a valid email address.').required('Email is required'),comment: yup.string().required('No comment entered yet.'),recaptcha: yup.string().required('Confirm that you are human.'),});
    
      const {
        'article-comment-name': name,'article-comment-email': email,'article-comment-comment': commentInput,'article-comment-submit': submit,} = keyBy(commentForm?.form?.inputs,KEY);
      return (
        <div>
          <p className="text text-success text-center">{msg && <p>Your comment has been added.</p>}</p>
          <Formik
            initialValues={formInitialValues}
            onSubmit={(comment,{ resetForm }) => {
              handLeverify();
              submitComment(comment);
              resetForm();
              commentCreated();
            }}
            validationSchema={validationSchema}
          >
            {({ values: comment,handleChange,handleSubmit,errors,touched }) => (
              <form id="add-comment" className="add-comment" onSubmit={handleSubmit}>
                <fieldset>
                  <div className="row">
                    <div className="col-md-6">
                      <label>
                        {name.label}:{' '}
                        <span className="text-danger">
                          {errors.name && touched.name && errors.name}
                        </span>
                      </label>
                      <input type="text" name="name" value={comment.name} onChange={handleChange} />
                    </div>
                    <div className="col-md-6">
                      <label>
                        {email.label}:{' '}
                        <span className="text-danger">
                          {errors.email && touched.email && errors.email}
                        </span>
                      </label>
    
                      <input type="text" name="email" value={comment.email} onChange={handleChange} />
                    </div>
                  </div>
                  <div>
                    <label>
                      {commentInput.label}:{' '}
                      <span className="text-danger">
                        {errors.comment && touched.comment && errors.comment}
                      </span>
                    </label>
                    <textarea
                      name="comment"
                      cols={40}
                      rows={3}
                      value={comment.comment}
                      onChange={handleChange}
                    ></textarea>
                  </div>
                  <Recaptcha
                    sitekey="mysitekey"
                    verifyCallback={handLeverify}
                    render="explicit"
                  />
                  <span className="text-danger">{verify && touched.recaptcha && errors.recaptcha}</span>
                </fieldset>
                <br />
                <button type="submit" className="theme-btn">
                  <span>{submit.label}</span>
                </button>
                <div className="clearfix"></div>
              </form>
            )}
          </Formik>
        </div>

我已经检查了回调,它在这方面工作正常。主要问题是表单未提交。它一直显示此消息,如下所述:Confirm that you are human.

可能是什么问题?

解决方法

在 Formik 设置中,值或错误都与 name 属性绑定。元素的 name 属性应该与带有 values 的键之一匹配。您有 recaptcha 的验证架构,但它与您的 Recaptcha 组件无关。

 <Recaptcha
     sitekey="mysitekey"
     verifyCallback={handleVerify}
     render="explicit"
  />

在 formik 中提交会触发一系列事件。请阅读此Formik Form Submission

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。