Интеграция ReactJS formik и EmailJs

#reactjs #formik

#reactjs #formik

Вопрос:

Я создаю контактную форму с помощью React и formik. Я хочу использовать электронную почту.Js, который позволит мне очень легко отправлять электронное письмо / детали моей контактной формы по электронной почте. Однако на самом деле нет никаких документов, относящихся к интеграции formik и EmailJs.Если кто-нибудь использовал такие технологии вместе, было бы здорово, если бы вы могли дать какой-либо совет. Вот мой код, и это то, что я пытаюсь сделать. Я все еще новичок в React, поэтому дайте мне знать, если я делаю что-то не так…

Это не формальный способ делать вещи. Просто передайте onSubmit и вызовите функцию.

 <form className="contact-form" onSubmit={sendEmail}>
 

Вот мой код, который относится к моей форме formik, а затем к моему атрибуту onSubmit formkik. Я не знаю точно, куда мне нужно передать функцию SendEmail(). Я не могу заставить это работать, и я получаю различные ошибки / предупреждения, такие как «Необработанная ошибка была обнаружена из submitForm (), ожидаемого элемента формы HTML или селектора стиля формы»

  <div className="buy-form-cont">
      <Formik
        initialValues={{
          name: "",
          email: "",
          powerWashed: false,
          options: "",
          info: "",
        }}
        validationSchema={validationSchema}
        onSubmit={(values, { setSubmitting, resetForm,}) => {
          sendEmail(values)
          console.log("submit", values);
         
       
          alert(
            "Thank you for the submission. Korionna will be in contact with you shortly"
          );
          setSubmitting(false);
          resetForm();
        }}
      >
 

Ответ №1:

У вас есть 2 варианта отправки электронных писем с помощью emailjs:

Вот пример:

 import {Formik, Field, Form} from 'formik';
import emailjs, {send} from 'emailjs-com'


export default function ContactForms() {
    
    function SendEmail(object) {
        emailjs.send("serviceID", "templadeID", object,"userID" )
            .then((result) => {
                console.log(result.text)
            }, (error) => {
                console.log(error.text)
            })
    }
    
      return (

            <Formik
          initialValues={{ name: "" }}
          onSubmit={(values, actions) => {
            setTimeout(() => {
              SendEmail(values)
              actions.setSubmitting(false)
            }, 1000)
          }}
        >
          {(props) => (
            <Form>
              <Grid templateColumns="repeat(2, 1fr)" gap="4">
                <Field name="name" validate={validateName}>
                    {({ field, form }) => (
                        <Box>
                            <FormControl isInvalid={form.errors.name amp;amp; form.touched.name}>
                                <FormLabel htmlFor="name">First name</FormLabel>
                                <Input {...field} id="name" placeholder="name" />
                                <FormErrorMessage>{form.errors.name}</FormErrorMessage>
                            </FormControl>
                        </Box>
                    )}
                </Field>
              <Button
                mt={4}
                colorScheme="teal"
                isLoading={props.isSubmitting}
                type="submit"
              >
                Submit
              </Button>
            </Form>
          )}
        </Formik>
      )
  }
 

Игнорируйте стили: P

Если вы хотите отправить с помощью formik, formik возвращает вам объект, который вы должны использовать emailjs.send() , и который он принимает объекты. Если вы используете emailjs.sendForm() его, вам потребуется использовать event.target вашу HTML-форму.

Это то, что я могу предположить, поскольку вы не показываете, как вы importing emailjs работаете, и не показываете, какую функцию вы используете и как.

Приветствия