← 목록

React Hooks를 활용한 폼 처리 방법

작성: 2026년 01월 09일읽기: 약 3분

웹 개발을 배우는 여러분, React Hooks를 사용하여 폼을 어떻게 쉽게 처리할 수 있는지 궁금하신가요? 오늘은 바로 그 방법을 알아보겠습니다. React Hooks는 코드를 더 간결하고 이해하기 쉽게 만들어주기 때문에, 폼 처리에 있어서도 매우 유용합니다.

useState를 사용한 기본 입력 처리

먼저, 가장 기본적인 입력 폼을 만들어 보겠습니다. 여기서는 useState Hook을 사용하여 입력값을 관리합니다.

import React, { useState } from 'react';

function Form() {
  const [name, setName] = useState('');

  const handleSubmit = (event) => {
    event.preventDefault();
    alert(`제출된 이름: ${name}`);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        이름:
        <input
          type="text"
          value={name}
          onChange={(e) => setName(e.target.value)}
        />
      </label>
      <button type="submit">제출</button>
    </form>
  );
}

이 코드는 사용자로부터 이름을 입력받는 간단한 폼을 만듭니다. useState를 사용하여 입력값을 name 상태로 관리하고, 폼이 제출될 때 그 값을 알림으로 표시합니다.

useEffect를 사용한 입력 검증

이제 입력값 검증을 추가해보겠습니다. useEffect Hook을 사용하여 입력값이 변경될 때마다 검증 로직을 실행할 수 있습니다.

import React, { useState, useEffect } from 'react';

function Form() {
  const [email, setEmail] = useState('');
  const [isValid, setIsValid] = useState(false);

  useEffect(() => {
    const emailRegex = /\S+@\S+\.\S+/;
    setIsValid(emailRegex.test(email));
  }, [email]);

  const handleSubmit = (event) => {
    event.preventDefault();
    if (isValid) {
      alert(`제출된 이메일: ${email}`);
    } else {
      alert('유효하지 않은 이메일입니다.');
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        이메일:
        <input
          type="email"
          value={email}
          onChange={(e) => setEmail(e.target.value)}
        />
      </label>
      <button type="submit">제출</button>
    </form>
  );
}

이 코드는 이메일 입력 폼을 만들고, useEffect를 사용하여 이메일 형식이 유효한지 검증합니다. 유효한 이메일 형식일 때만 사용자가 폼을 제출할 수 있습니다.

커스텀 Hook을 사용한 폼 처리

마지막으로, 여러분이 여러 폼을 관리해야 할 때를 대비하여 커스텀 Hook을 만들어 보겠습니다. 이를 통해 코드 재사용성을 높이고, 폼 처리 로직을 더욱 깔끔하게 관리할 수 있습니다.

import React, { useState } from 'react';

function useFormInput(initialValue) {
  const [value, setValue] = useState(initialValue);

  const handleChange = (e) => {
    setValue(e.target.value);
  };

  return {
    value,
    onChange: handleChange,
  };
}

function Form() {
  const name = useFormInput('');
  const email = useFormInput('');

  const handleSubmit = (event) => {
    event.preventDefault();
    alert(`제출된 이름: ${name.value}, 이메일: ${email.value}`);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        이름:
        <input type="text" {...name} />
      </label>
      <label>
        이메일:
        <input type="email" {...email} />
      </label>
      <button type="submit">제출</button>
    </form>
  );
}

이 코드는 useFormInput이라는 커스텀 Hook을 사용하여 이름과 이메일 입력을 관리합니다. 이 방법을 사용하면, 각 입력 필드의 상태 관리 로직을 재사용할 수 있으며, 폼이 더 많아지거나 복잡해져도 쉽게 확장할 수 있습니다.

이상으로 React Hooks를 사용한 폼 처리 방법에 대해 알아보았습니다. Hooks를 활용하면 폼 처리 로직을 더욱 간결하고 효율적으로 만들 수 있습니다. Happy coding!