반응형
제어컴포넌트 : 어플리케이션이 사용자 입력을 제어한다.
실시간으로 값에 대한 피드백이 필요할 때 사용
항상 최신상태 유지, 사용자가 입력하는 모든데이터 동기화
제어컴포넌트는 사용자가 입력하는 모든 데이터가 동기화 되기 때문에 불필요한 리렌더링 혹은 api요청으로 인한 과부하가 걸릴 수 있다.
이런 경우 보통 debounce를 사용하고 있다. (대부분 debounce 혹은 throttle을 사용할 듯)
비제어컴포넌트 : 어플리케이션이 사용자 입력을 제어하지 않음
제출시에만 값이 필요할 때 사용
사용자의 입력값이 어플리케이션을 업데이트 시키지 않음.
사용자가 직접 트리거하기 전까지 리렌더링이나 업데이트가 되지 않음.
ref를 이용하여 form내의 값을 관리하면 불필요한 리렌더링을 방지할 수 있는데, 이러한 비제어 컴포넌트를 사용해 렌더링을 최적화 하는 라이브러리가 react-hook-form 이라고 한다.
한 눈에 비교하기
아래 gif에서 확인할 수 있다.
제어컴포넌트는 사용자가 값을 입력할때마다 컴포넌트가 리렌더링 된다.
한편 비제어컴포넌트는 '확인'버튼을 클릭할때만 레렌더링(업데이트) 된다.
반응형
'개발 > React' 카테고리의 다른 글
React 튜토리얼에 있는 class형 컴포넌트.. (0) | 2022.11.01 |
---|---|
state를 직접 변경하지 않고 useState로 변경해야 하는 이유 (0) | 2022.10.07 |
useRef 로 관리하는 값이 바뀌었을 때 리렌더링 되지 않는 이유 (0) | 2022.10.03 |
React.memo - Memoization을 이용한 불필요 리렌더링 없애기 (0) | 2022.09.18 |
Functional update of setState -> state의 변화가 state를 참조하지 않게 됨 (0) | 2022.08.13 |