자연스럽게 폼을 만들 때는 react-hook-form을 사용하게 되어, 정리를 위해 글을 작성하게 되었다.
react-hook-form 라이브러리를 사용하는 이유는 뭘까? 우선 리액트의 제어 컴포넌트와 비제어 컴포넌트에 대해 알 필요가 있다.
setState()
를 통해 폼 엘리먼트의 값을 업데이트한다.react-hook-form은 비제어 컴포넌트 방식을 사용하여 불필요한 리렌더링을 최소화하고, 제어 컴포넌트에서 다룰 수 있는 실시간 유효성 검사 및 동기화를 가능하게 해주기 때문에 사용하게 되는 것 같다.
<Controller>
프로젝트에서 react-hook-form을 사용하면서 calendar, radio group 등의 커스텀 컴포넌트를 사용해 폼을 구성할 일이 생겼다.
react-hook-form의 register 함수를 통해 직접적으로 폼 요소를 등록하고 값을 제어할 수 있지만 커스텀 컴포넌트로 관리하기 위해서 <Controller>
를 사용했다.
<form onSubmit={handleSubmit(onSubmit)}>
...
<Controller
name="RadioGroup"
control={control}
rules={{ required: "값이 필요합니다" }}
render={({ field, fieldState: { error } }) => (
<>
<div>
<RadioGroupDemo {...field} />
{error && (
<p className="text-sm text-red-500">{error.message}</p>
)}
</div>
</>
)}
/>
...
</form>
<Controller>
에서 사용된 props는 다음과 같다.