폼 처리와 유효성 검사 구현하기: React Hook Form을 사용한 폼 처리와 간단한 유효성 검사 방법.
폼 처리와 유효성 검사 구현하기: React Hook Form을 사용한 폼 처리와 간단한 유효성 검사 방법
소개
사용자 입력을 처리하는 폼은 웹 애플리케이션의 필수 요소입니다. 폼의 상태를 효율적으로 관리하고 유효성 검사(validation)를 통해 사용자 경험을 개선하는 것은 매우 중요합니다. React Hook Form
은 React에서 폼을 간편하게 처리하고 유효성 검사를 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. 이 글에서는 React Hook Form
을 사용하여 폼을 처리하고 간단한 유효성 검사를 구현하는 방법을 설명합니다.
React Hook Form 설치
먼저, React Hook Form
을 프로젝트에 설치해야 합니다. 이를 위해 npm이나 yarn을 사용할 수 있습니다. 다음 명령어를 실행하여 설치하세요:
bashnpm install react-hook-form
또는
bashyarn add react-hook-form
기본적인 폼 구현
이제 React Hook Form
을 사용하여 기본적인 폼을 구현해보겠습니다. 다음은 이름과 이메일을 입력받는 간단한 폼 예제입니다.
jsximport React from 'react'; import { useForm } from 'react-hook-form'; function App() { const { register, handleSubmit, formState: { errors } } = useForm(); const onSubmit = data => console.log(data); return ( <form onSubmit={handleSubmit(onSubmit)}> <div> <label>Name</label> <input {...register("name", { required: true })} /> {errors.name && <p>Name is required</p>} </div> <div> <label>Email</label> <input {...register("email", { required: true })} /> {errors.email && <p>Email is required</p>} </div> <input type="submit" /> </form> ); } export default App;
위의 코드는 기본적인 폼을 구현한 예제입니다. 여기서 useForm
훅을 사용하여 폼의 상태를 관리하고, register
함수를 통해 각 입력 필드를 폼에 등록합니다. handleSubmit
함수는 폼 제출 시 실행되는 콜백 함수를 지정합니다. 또한, formState
객체를 사용하여 각 입력 필드의 유효성 검사 결과를 확인합니다.
폼 유효성 검사
위 예제에서는 간단한 유효성 검사로 필수 입력 필드 여부만을 확인했습니다. 이제 더 복잡한 유효성 검사를 추가해보겠습니다. 이메일 형식을 검사하는 예제를 보겠습니다.
jsximport React from 'react'; import { useForm } from 'react-hook-form'; function App() { const { register, handleSubmit, formState: { errors } } = useForm(); const onSubmit = data => console.log(data); return ( <form onSubmit={handleSubmit(onSubmit)}> <div> <label>Name</label> <input {...register("name", { required: true })} /> {errors.name && <p>Name is required</p>} </div> <div> <label>Email</label> <input {...register("email", { required: "Email is required", pattern: { value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i, message: "Invalid email address" } })} /> {errors.email && <p>{errors.email.message}</p>} </div> <input type="submit" /> </form> ); } export default App;
여기에서는 pattern
옵션을 추가하여 이메일 형식을 확인하는 유효성 검사를 추가했습니다. pattern
속성은 정규 표현식을 받아서 입력 값이 주어진 형식과 일치하는지 검사합니다. 일치하지 않는 경우에 보여줄 오류 메시지도 함께 설정할 수 있습니다.
사용자 정의 유효성 검사
때로는 기본적인 유효성 검사 규칙으로는 충분하지 않은 경우가 있습니다. 이럴 때는 사용자 정의 유효성 검사를 추가할 수 있습니다. 다음 예제에서는 비밀번호와 비밀번호 확인 필드를 검사하는 예제를 보여줍니다.
jsximport React from 'react'; import { useForm } from 'react-hook-form'; function App() { const { register, handleSubmit, watch, formState: { errors } } = useForm(); const onSubmit = data => console.log(data); const password = watch('password'); return ( <form onSubmit={handleSubmit(onSubmit)}> <div> <label>Password</label> <input type="password" {...register("password", { required: true })} /> {errors.password && <p>Password is required</p>} </div> <div> <label>Confirm Password</label> <input type="password" {...register("confirmPassword", { validate: value => value === password || "Passwords do not match" })} /> {errors.confirmPassword && <p>{errors.confirmPassword.message}</p>} </div> <input type="submit" /> </form> ); } export default App;
여기서는 validate
옵션을 사용하여 사용자 정의 유효성 검사를 추가했습니다. validate
는 함수를 받아서 입력 값이 유효한지 검사할 수 있습니다. 이 예제에서는 비밀번호와 비밀번호 확인 필드의 값이 일치하는지 확인하고, 일치하지 않을 경우 오류 메시지를 표시합니다.
결론
React Hook Form
은 최소한의 코드로 폼의 상태를 관리하고 유효성 검사를 쉽게 구현할 수 있도록 도와줍니다. 다양한 유효성 검사 옵션과 사용자 정의 유효성 검사를 활용하여 사용자 경험을 개선할 수 있습니다. 위의 예제들을 통해 React Hook Form
을 활용한 폼 처리와 유효성 검사 구현에 대해 잘 이해하게 되었기를 바랍니다.