공식 문서에는 유연하고 확장 가능한 사용하기 쉬운 고성능 폼 검증 라이브러리라고 소개되어 있다.
React Hook Form을 설치하는 커맨드는 간단합니다.
npm install react-hook-form //npm 사용
yarn add react-hook-form //yarn 사용
useState대신에 쉽고 적은 코드로 input 값을 가져 올 수 있습니다.
export default function App() {
const { register } = useForm();
return(
<input {...register("username")} />
<input {...register("password")} />
);
}
register를 통해서 user name이라는 이름으로 name 필드를 바로 사용할 수 있고 value, onChange 기능이 register 하나로 처리될 수 있습니다.
만약 내가 작성하고 있는 input의 값을 알고 싶다면?
export default function App() {
const { register, watch } = useForm();
console.log(watch()); //입력받고 있는 input의 모든 value
console.log(watch("username")); // username 필드의 input value
console.log(watch("password")); // password 필드의 input value
return(
<input {...register("username")} />
<input {...register("password")} />
);
}
watch를 통해서 input 필드의 value 값을 가져올 수 있습니다.
input 값의 유효성 검사는 formState의 errors 객체로 쉽게 확인할 수 있습니다.
오류가 생긴 input 필드로 자동 focus가 잡히는 것도 확인할 수 있습니다
export default function App() {
const { register, watch, formState : {errors}} = useForm();
cons
return(
<input {...register("username", {required : true, minLength : { value : 10, message : "10글자 이상 입력해주세요"})} />
<input {...register("password"), {required : true} />
);
}
지금까지 form의 onSubmit 할 때 페이지 re-load를 막기 위해서 e.preventDefault를 사용해 왔습니다.
하지만 handleSubmit을 사용하면 e.preventDefault가 필요 없습니다.
export default function App() {
const { register, watch, formState : {errors}, handleSubmit} = useForm();
const onSubmit = (data) => {
console.log(data);
}
return(
<form onSubmit = {handleSubmit(onSubmit)}>
<input {...register("username", {required : true, minLength : { value : 10, message : "10글자 이상 입력해주세요"})} />
<input {...register("password"), {required : true} />
</form>
);
}
form을 제출할 onSubmit 함수를 handleSubmit으로 감싸주면 끝입니다.
handleSubmit을 통해 onSubmit 함수는 data를 인자로 받을 수 있고 data를 통해서 form으로 관리되는 data를 확인할 수 있다.
register, handleSubmit, formState 말고도 여러 가지 api들이 있다.
여러 개의 input 상태를 관리해야 할 때 쓰기 좋을 것 같다.