이 글은 단순히 리액트 공식 문서를 읽고 베꼈을 뿐이다!! 학습 목적이라면 공식 문서를 보는 걸 추천한다.

공식 문서
https://react.dev/learn/referencing-values-with-refs
Referencing Values with Refs – React
The library for web and native user interfaces
react.dev
컴포넌트에 ref 추가하기
import { useRef } from 'react';
const ref = useRef(0);
로 초기 설정ref.current
로 값 접근 및 변형- ref는 리렌더링하더라도 잃어버리지 않음
ref.current
를 바꿔도 리렌더링이 일어나지 않음 -> 렌더링에 사용하지 않는 값 담기!
ref vs state
ref | state |
---|---|
useRef 는 { current: initialValue } 를 반환함 |
useState 는 [value, setValue] 를 반환함 |
값이 변해도 리렌더링을 유발하지 않음 | 값을 변경하면 리렌더링이 일어남 |
변형 가능 | 변형 불가능 |
렌더링 도중에 ref.current 를 읽거나 쓰면 안 됨 (렌더링 함수의 순수성 유지) |
언제든지 상태값을 읽어도 되지만 snapshot임을 기억하기 |
useRef의 동작 원리
const useRef = (initialValue) => {
const [ref] = useState({ current: initialValue });
return ref;
};
- useRef는 useState를 이용해서 구현 가능
- useState를 이용해서 리렌더링에도
{ current: initialValue }
객체를 기억하게끔 함 - 상태값 내부의 current를 변형하더라도 리액트는 리렌더링을 유발하지 않음
- 상태 변경 함수를 사용하지 않으므로 항상 같은 객체의 참조값을 돌려줌
ref는 언제 써야 할까
- setTimeout id를 기억할 때
- DOM element를 저장하고 조작할 때
- JSX를 만드는 데 필요 없는 값들을 기억할 때
ref 맛있게 쓰는 법
- ref는 비상탈출구: 어플리케이션의 로직이나 데이터 흐름이 ref에 많이 의존하고 있다면 다시 생각해 볼 것
- 렌더링 도중에
ref.current
를 읽거나 쓰지 말 것: 렌더링에 필요한 정보를 담아야 한다면 상태를 이용할 것 - ref는 snapshot이 아니라 그냥 자바스크립트 객체: 마음대로 변형해도 됨
'리액트 공식 문서 읽기' 카테고리의 다른 글
25화: Synchronizing with Effects (0) | 2023.06.20 |
---|---|
24화: Manipulating the DOM with Refs (0) | 2023.06.19 |
22화: Scaling Up with Reducer and Context (0) | 2023.06.18 |
21화: Passing Data Deeply with Context (0) | 2023.06.18 |
20화: Extracting state logic into a reducer (0) | 2023.06.18 |