본문 바로가기
프론트엔드로 가는 길/react

EmailJS 오류

by woody-j 2023. 11. 6.

시키는 대로 했더니 뭐가 안되노

const ContactForm = () => {
  const formRef = useRef<HTMLFormElement | null>(null);

  const sendEmail = (e: { preventDefault: () => void }) => {
    e.preventDefault();

    emailjs.sendForm("***", "***", form.current, "***").then(
      (result) => {
        alert("성공적으로 이메일이 전송되었습니다.");
        form.current.reset();
      },
      (error) => {
        console.log(error.text);
        alert("이메일이 전송이 실패되었습니다.");
      }
    );
  };

  return (
    <AskContainer>
      <AskForm ref={form} onSubmit={sendEmail}>
        <Label>
          답변 받으실 이메일
          <Input type="email" name="user_email" placeholder="ex)abcd@naver.com" required />
        </Label>
        <Label>
          문의 제목
          <Input
            type="text"
            name="ask_title"
            placeholder="제목을 입력해주세요.(20자 이내)"
            maxLength={20}
            required
          />
        </Label>
        <Label>
          문의 내용
          <TextArea name="ask_message" placeholder="제목을 입력해주세요." required />
        </Label>
        <SubmitButton type="submit" value="문의하기" />
      </AskForm>
    </AskContainer>
  );
};

export default ContactForm;

 

 

그래그래

위의 오류는 form.current가 null일 가능성이 있기 때문에 TypeScript에서 오류가 발생한 것.

Ref 객체를 사용할 때 null일 가능성을 처리해야 한다.

 

 

<수정코드>

const ContactForm = () => {
  const formRef = useRef<HTMLFormElement | null>(null);

  const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
    e.preventDefault();

    if (formRef.current) {
      emailjs.sendForm("***", "***", formRef.current, "***").then(
        (result) => {
          alert("성공적으로 이메일이 전송되었습니다.");
          if (formRef.current) {
            formRef.current.reset();
          }
        },
        (error) => {
          console.log(error.text);
        }
      );
    }
  };

'프론트엔드로 가는 길 > react' 카테고리의 다른 글

12. react_redux 확실하게 정리하기  (0) 2023.05.22
11. DatePicker  (0) 2023.04.18
10.Rechart  (0) 2023.04.17
09. localStorage  (0) 2023.02.14
08. react_redux  (0) 2023.01.30