소유권 선택
입력값으로 즉시 UI를 바꿔야 하면 제어, 제출 때만 필요하면 비제어도 검토한다.
모든 입력을 state로 올리는 것이 정답은 아니다제어 컴포넌트와 비제어 컴포넌트를 이름으로 외우면 폼 버그를 잡기 어렵다. value를 React state가 소유하는지, DOM이 보관하고 ref로 읽는지, 검증이 입력 중인지 blur 후인지 submit 시점인지가 실제 설계 기준이다.
입력값으로 즉시 UI를 바꿔야 하면 제어, 제출 때만 필요하면 비제어도 검토한다.
모든 입력을 state로 올리는 것이 정답은 아니다value와 onChange를 함께 두어 React state와 화면 값을 항상 맞춘다.
value만 주면 입력이 잠긴다defaultValue로 초기값을 주고 submit에서 FormData나 ref로 현재 값을 읽는다.
defaultValue 변경은 기존 입력값을 덮지 않는다touched, dirty, submitted, serverError를 나눠 오류 노출 시점을 조절한다.
처음부터 모든 오류를 보여주지 않을 수 있다파일 입력, 한글 IME, 큰 텍스트 입력은 제어 방식이 경험을 해치지 않는지 테스트한다.
파일 input은 value를 직접 제어하지 않는다