React · Form Ownership

제어·비제어 폼의 값 소유권 결정

제어 컴포넌트와 비제어 컴포넌트의 차이는 문법이 아니라, 현재 입력값을 React state가 소유하는지 DOM이 소유하는지에 있다.

01

소유자 선택

입력 중 화면이 바로 반응해야 하면 React state가 값을 소유한다.

02

초기값 설정

제어는 value, 비제어는 defaultValue로 시작값을 둔다.

03

값 읽기

제어 방식은 state에서, 비제어 방식은 submit 시점 DOM에서 읽는다.

04

초기화

reset이 state와 DOM 값을 같은 방식으로 되돌리는지 확인한다.

Controlled
state 원본 입력값으로 미리보기, 검증, 버튼 활성화를 즉시 계산
필드 수가 많으면 성능 고려
Uncontrolled
DOM 원본 단순 제출 폼이나 file input에 적합
실시간 UI 연동은 약함
defaultValue
초기 DOM 값 렌더 후 사용자가 바꾼 값은 DOM이 관리
value와 혼용 금지
FormData
제출 수집 name 속성 기준으로 값을 모음
checkbox와 multi value 한계

경고 · 파일 · 검증 점검

경고 undefined에서 문자열로 바뀌는 전환 경고가 없다.
파일 file input은 비제어로 다룬다.
타이밍 검증 시점과 값 소유 방식이 맞다.
초기화 제출 후 폼이 의도대로 비워지거나 유지된다.