해당 포스트는 React hook form의 공식문서를 참고하여 작성했습니다.
React hook form : Get Started
import React from "react";
import { useForm } from "react-hook-form";
export default function App() {
const { register, handleSubmit } = useForm();
const onSubmit = data => console.log(data);
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("firstName")} />
<select {...register("gender")}>
<option value="female">female</option>
<option value="male">male</option>
<option value="other">other</option>
</select>
<input type="submit" />
</form>
);
}import React from "react";
import { useForm } from "react-hook-form";
export default function App() {
const { register, handleSubmit } = useForm();
const onSubmit = data => console.log(data);
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("firstName")} />
<select {...register("gender")}>
<option value="female">female</option>
<option value="male">male</option>
<option value="other">other</option>
</select>
<input type="submit" />
</form>
);
}
const { register, handleSubmit } = useForm();
const onSubmit = data => console.log(data);
import React from "react";
import { useForm } from "react-hook-form";
export default function App() {
const { register, handleSubmit } = useForm();
const onSubmit = data => console.log(data);
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("firstName", { required: true, maxLength: 20 })} />
<input {...register("lastName", { pattern: /^[A-Za-z]+$/i })} />
<input type="number" {...register("age", { min: 18, max: 99 })} />
<input type="submit" />
</form>
);
}
이렇게 html에서 바로 validation을 할 수가 있다.
List of validation rules supported:
required
min
max
minLength
maxLength
pattern
validate
지원하는 속성은 이러하다.
npm install @hookform/resolvers yup
먼저 프로젝트에 resolvers를 Install한다.
const schema = yup.object({
firstName: yup.string().required(),
age: yup.number().positive().integer().required(),
}).required();
이게 react hook form의 궁극적인 장점이라고 생각한다.
schema를 만들어서 validation을 전역변수로 걸어줄 수 있다.
또한 DB에 form data가 들어가기 전, DB와 흡사한 validation을 거치고 나서 INSERT가 되는 것이기 때문에 효율성은 더욱 높아진다.
이미 react에서 validation을 거치면서 동적인 validation을 할 수 있다는 점이 큰 장점이라고 생각한다.
const {
register,
handleSubmit,
reset,
watch,
setValue,
formState: { errors },
} = useForm({
resolver: yupResolver(schema),
});
import React from "react";
import { useForm } from "react-hook-form";
export default function App() {
const { register, formState: { errors }, handleSubmit } = useForm();
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("firstName", { required: true })} />
{errors.firstName?.type === 'required' && "First name is required"}
<input {...register("lastName", { required: true })} />
{errors.lastName && "Last name is required"}
<input type="submit" />
</form>
);
}