让 React 表单使用 Formik 发送电子邮件

Posted

技术标签:

【中文标题】让 React 表单使用 Formik 发送电子邮件【英文标题】:Have React form send an email using Formik 【发布时间】:2021-04-26 14:13:39 【问题描述】:

我正在尝试使用 Formik 创建的表单,Yup 向我发送了一封电子邮件“onSubmit”,但我不确定需要在“onSubmit”函数中添加什么才能使其正常工作。还是我需要一个handleSubmit,如果需要,我会把它写出来让它给我发一封电子邮件?

function Contact()
return (
   <Formik
    initialValues=
        name: '',
        email: '',
        message: '',
    
    validationSchema=Yup.object(
        name: Yup.string()
            .required('Required'),
        email: Yup.string()
            .email('Invalid Email Address')
            .required('Required'),
        message: Yup.string()
            .min(7, 'More details are always helpful.')
            .required('Required')
    )
    onSubmit=(values,  setSubmitting, resetForm ) => 
        setTimeout(() => 
            resetForm();
            setSubmitting(false);
        , 3000)
    
   >
       props => (
           <Form>
               <h4>Shoot me a message here.</h4>

               <div className="field half first">
                    <CustomTextInput label="Name" name="name" type="text" placeholder="Enter Name" />
               </div>

               <div className="field half">
                    <CustomTextInput label="Email" name="email" type="email" placeholder="Enter Your Email" />
               </div>

               <div className="field">
                    <CustomTextarea label="message" name="message" rows="4" placeholder="Your Message Here" />
               </div>

               <button type="submit" className="special">props.isSubmitting ? 'Sending...' : 'Send Message'</button>
           </Form>
       )
   </Formik>

【问题讨论】:

【参考方案1】:

我认为这是您应该采取的方法:

function Contact() 
  const sendDataToEmailApi = (values) => 
    // call your email api with the values
    return true; // to show the send process was successful
  ;

  const handleSubmit = (values,  setSubmitting, resetForm ) => 
    const emailWasSent = sendDataToEmailApi(values);
    if (emailWasSent) 
      resetForm();
      setSubmitting(false);
    
  ;

  const validationSchema = Yup.object(
    name: Yup.string().required("Required"),
    email: Yup.string().email("Invalid Email Address").required("Required"),
    message: Yup.string()
      .min(7, "More details are always helpful.")
      .required("Required"),
  );

  return (
    <Formik
      initialValues=
        name: "",
        email: "",
        message: "",
      
      validationSchema=validationSchema
      onSubmit=handleSubmit
    >
      /* ... */
    </Formik>
  );

【讨论】:

好吧,所以现在我正在使用 EmailJS api,但是当我单击“发送消息”时,得到“从 submitForm() 捕获到未处理的错误需要 html 表单元素或表单的样式选择器”

以上是关于让 React 表单使用 Formik 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

将 Formik 与 React 和 material-ui 的 TextField 一起使用

使用 Formik 的 React-Native 选择器

使用Formik轻松开发更高质量的React表单入门

[react] 你有使用过formik库吗?说说它的优缺点

使用 Formik 和 Yup 和 React-select 进行验证

React 故事书显示有错误的 formik 表单