Udemy React 강의 134번 정리
React에는 UI를 구성하는 두 개의 중요한 값이 있다.
둘은 "언제 사용하는가"와 "리렌더링이 발생하는가"에서 큰 차이를 가진다.
이번 글에서는 왜 ref만으로 UI를 업데이트할 수 없는지, state와 ref의 정확한 역할 차이를 살펴본다.
아래 코드가 왜 안 되는지부터 보자.
<p>{playerName.current.value}</p>
첫 번째 렌더에서 에러가 발생한다. → ref.current가 undefined
처음 컴포넌트가 렌더될 때는 아직 <input ref={playerName}>와 연결되기 전이다. → 따라서 playerName.current === undefined
그래서 첫 렌더 때 "Cannot read property 'value' of undefined" 같은 오류가 난다.
강의에서 소개된 우회 코드 :
<p>{playerName.current ? playerName.current.value : "Unknown entity"}</p>
이렇게 하면 에러는 사라지지만, 버튼을 클릭해도 UI가 업데이트되지 않는다.
왜일까?
이게 state와 ref의 가장 중요한 차이다.
| 구분 | ref | state |
|---|---|---|
| 값이 변해도 UI가 리렌더링 되나? | ❌ 리렌더링 안 됨 | ⭕️ 리렌더링 됨 |
| DOM 요소 접근 용도 | ⭕️ | ❌ |
| 값이 자주 바뀌지만 UI에 반영할 필요 없을 때? | ⭕️ 매우 효율적 | ❌ 매번 리렌더링 됨 |
| UI 업데이트 필요할 때? | ❌ 사용하면 안 됨 | ⭕️ 필수 |
React는 state가 변경될 때만 컴포넌트가 다시 실행된다.
ref는 아무리 바뀌어도 컴포넌트를 다시 실행하지 않는다.
그래서 ref만으로는 UI가 업데이트 될 수 없다.
state는 UI와 1:1로 연결되어 있기 때문에
즉, UI에 즉시 반영되어야 하는 값은 반드시 state로 관리해야 한다.
반면 ref는 값이 바뀌어도 컴포넌트가 리렌더링 되지 않는다. 따라서 UI에 반영되지 않는다.
❗️ ref는 DOM에 접근하거나 렌더링과 무관한 값 저장용일 뿐, UI를 업데이트하려면 무조건 state를 사용해야 한다.
React에서 두 값은 목적 자체가 다르다.