JS

[react] useWatch vs watch

ehddkDEV 2025. 3. 4. 15:08

react-hook-form 을 이용해 폼 작성을 구현하는 도중에  이미 기초값이 있는 폼 필드에서 새로운 값으로

수정을 하려면 해당 필드를 찾아야 했다. 그래서 처음엔 watch 속성을 사용했다.

 

const counselTime = watch('counselTime')

<Controller
 control={form.control}
  name="counselTime"
  render={({ field }) => (
     <input
      value={field.value}
      onChange={e => field.onChange(e.target.value)}
     />
)} />

 

watch는 폼의 입력 값이 변경될 때마다 특정 값을 반환한다.

예를 들어 5개의 input이 있을때 하나의 input 값만 바뀌어도 5개 모두 다 리렌더링이 되버려서 성능 최적화에 적합하지 않는다는 것!

 

공식 문서에도 이렇게 나와있는 걸 볼 수 있다.

' watch는 호출될 때 어플리케이션 또는 Form을 전부 리렌더링하므로 성능 이슈가 발생한다면 별도의 콜백함수 또는 useWatch를 사용하세요 '

 

 

  const counselTime = useWatch({
    control: form.control,
    name: "counselTime",
  });

 

이렇게 어떠한 요소를 찾을 때 watch 속성을 쓸 수는 있지만 굳이 모든 컴포넌트를 리렌더링 할 필요가 없기에

useWatch를 사용함으로써 해당 입력 값에 대해 리렌더링 범위를 제한할 수 있다는 특징이 있다.