Uncontrolled Component

개발일기 ·2026년 2월 24일

Uncontrolled Component란?

React에서 form을 다루다 보면,
Controlled / Uncontrolled Component라는 개념을 자주 접하게 된다.

이 둘의 차이는 단순한 구현 방식이 아니라,
입력값을 누가 관리하느냐에 대한 구조적 선택이다.

Controlled Component

const [value, setValue] = useState("");

<input value={value} onChange={e => setValue(e.target.value)} />

특징:
-input의 값은 React state에서 관리
-타이핑할 때마다 setState 발생
-그에 따라 매번 rerender

장점

상태 추적이 명확함
값 제어가 직관적

단점

input 수가 많아질수록 렌더링 비용 증가
상태 관리 코드가 빠르게 복잡해짐

Uncontrolled Component

<input ref={inputRef} />

또는 react-hook-form 방식:

<input {...register("email")} />

특징:

input 값은 DOM이 직접 관리
React는 submit, validation 등 필요한 순간에만 값 접근
입력 중에는 React rerender 발생 없음

장점

렌더링 횟수 감소
대형 폼에서도 성능 안정적
상태 관리 코드 최소화

단점

실시간 값 제어에는 부적합
로직 설계가 필요

핵심 차이

구분값 관리
ControlledReact state
UncontrolledDOM

Controlled는 React가 값의 주인,
Uncontrolled는 DOM이 값의 주인이다.

react-hook-form이 Uncontrolled를 사용하는 이유

폼은 구조적으로:

입력 필드가 많고

검증 로직이 많고

단계가 복잡하다.

Controlled 방식으로 관리하면
상태 관리와 렌더링 비용이 빠르게 증가한다.

react-hook-form은
DOM 중심 구조(Uncontrolled)를 채택하여

불필요한 rerender 최소화

성능 개선

코드 복잡도 감소

라는 효과를 얻는다.

0개의 댓글