React 프로젝트에서 폼 검증은 사용자 경험을 높이기 위해 중요한 요소입니다. Formik과 Yup 라이브러리를 사용하면 간편하고 체계적으로 폼 검증 로직을 작성할 수 있습니다.
1. Formik과 Yup 설치
먼저 프로젝트에 Formik과 Yup을 설치합니다.
npm install formik yup2. 기본 폼 만들기
Formik의 useFormik 훅을 사용해 기본 폼 상태 및 제출 핸들러를 설정할 수 있습니다.
import React from 'react';
import { useFormik } from 'formik';
function SignupForm() {
const formik = useFormik({
initialValues: {
email: '',
password: '',
},
onSubmit: values => {
alert(JSON.stringify(values, null, 2));
},
});
return (
<form onSubmit={formik.handleSubmit}>
<label htmlFor="email">Email</label>
<input
id="email"
name="email"
type="email"
onChange={formik.handleChange}
value={formik.values.email}
/>
<label htmlFor="password">Password</label>
<input
id="password"
name="password"
type="password"
onChange={formik.handleChange}
value={formik.values.password}
/>
<button type="submit">Submit</button>
</form>
);
}
export default SignupForm;3. Yup으로 검증 스키마 작성하기
Yup을 활용해 각 필드에 대한 검증 규칙을 정의합니다.
import * as Yup from 'yup';
const validationSchema = Yup.object({
email: Yup.string()
.email('유효한 이메일 주소를 입력하세요.')
.required('이메일은 필수 입력입니다.'),
password: Yup.string()
.min(6, '비밀번호는 최소 6자리입니다.')
.required('비밀번호는 필수 입력입니다.'),
});4. Formik에 Yup 검증 적용하기
Formik 설정 시 validationSchema 옵션에 Yup 스키마를 넣어 폼 검증을 쉽게 처리할 수 있습니다.
const formik = useFormik({
initialValues: {
email: '',
password: '',
},
validationSchema: validationSchema,
onSubmit: values => {
alert(JSON.stringify(values, null, 2));
},
});5. 에러 메시지 UI에 표시하기
Formik의 errors와 touched 상태를 활용해 입력 필드 아래에 에러 메시지를 보여줄 수 있습니다.
<input
id="email"
name="email"
type="email"
onChange={formik.handleChange}
onBlur={formik.handleBlur}
value={formik.values.email}
/>
{formik.touched.email && formik.errors.email ? (
<div style={{ color: 'red' }}>{formik.errors.email}</div>
) : null}위 예제를 응용하면 실무에서 흔히 쓰이는 로그인, 회원가입 폼 같은 복잡한 폼도 손쉽게 관리할 수 있습니다. Formik과 Yup은 유지보수가 쉽고 가독성 높은 폼 검증 코드를 작성하는 데 큰 도움을 줍니다.
'React' 카테고리의 다른 글
| React에서 Error Boundary로 오류 처리하기 (1) | 2026.04.16 |
|---|---|
| React 앱에서 Lazy Loading 이미지 처리하기 (1) | 2026.04.16 |
| React Router v6의 최신 기능과 사용법 (0) | 2026.04.15 |
| React Suspense로 데이터 로딩 경험 개선하기 (0) | 2026.04.14 |
| React에서 Virtualized List 구현하기 (0) | 2026.04.13 |