Blog
자주 사용하는 리액트 훅 (1)
서론#
React를 사용하다 보면
몇몇 훅은 거의 모든 컴포넌트에서 반복해서 사용하게 된다.
이 글에서는
그중에서도 가장 기본이 되는 다음 세 가지 훅을 정리한다.
• useState
• useEffect
• useRef
각 훅이 무엇을 위한 도구인지,
그리고 어떤 상황에서 유용한지를 중심으로 정리한다.
(1) useState#
useState는
컴포넌트가 기억해야 할 값을 만들기 위한 훅이다.
값이 변경되면
React는 해당 컴포넌트를 다시 렌더링한다.
그래서 useState는 주로
다음과 같은 경우에 유용하다.
- 입력값, 선택값처럼 UI에 직접 반영되는 값
- 토글, 모달 열림 여부 같은 UI 제어 상태
- 화면에 표시되는 데이터 상태
const [value, setValue] = useState("");
중요한 점은
useState로 관리되는 값은
렌더링 결과에 영향을 준다는 것이다.
값이 바뀌었는데
화면을 다시 그릴 필요가 없다면,
그 값은 state가 아닐 가능성이 크다.
(2) useEffect#
useEffect는
렌더링 결과로 인해 발생하는 사이드 이펙트를 처리하기 위한 훅이다.
여기서 말하는 사이드 이펙트는
렌더링 그 자체가 아닌, 그 이후에 발생해야 하는 작업이다.
대표적인 예는 다음과 같다.
- 데이터 요청
- 이벤트 리스너 등록 / 해제
- 외부 API 호출
- 상태 변경에 따른 동기화 작업
useEffect(() => {
fetchData();
}, []);
useEffect는
렌더링 이후 실행된다는 점이 핵심이다.
그래서 화면을 그리는 계산 로직과
외부에 영향을 주는 로직을
구분하는 데 유용하다.
(3) useRef#
useRef는
값을 저장하지만,
그 값이 변경돼도 렌더링을 발생시키지 않는다.
이 특성 때문에
useRef는 다음과 같은 경우에 유용하다.
- DOM 요소에 직접 접근해야 할 때
- 렌더링과 무관한 값을 유지해야 할 때
- 이전 값을 저장해야 할 때
- 타이머, 인터벌 ID 관리
const inputRef = useRef<HTMLInputElement>(null);
useRef는
state와 달리 값이 바뀌어도
컴포넌트는 다시 그려지지 않는다.
그래서
"값은 필요하지만, UI와는 무관하다"는 경우에
자연스러운 선택이 된다.
관련 게시글
8개
JSX가 무엇인지 정리하기
JSX가 무엇인지 개념부터 정리합니다. HTML처럼 보이지만 JavaScript 문법 확장이라는 점과, 빌드 과정에서 함수 호출로 변환되는 구조를 중심으로 설명합니다.
메모이제이션이란 무엇인가
메모이제이션이 무엇인지 개념부터 정리합니다. 계산 최적화 기법으로서의 메모이제이션이 어떤 전제에서 성립하는지, 그리고 언제 의미를 가지는지를 중심으로 설명합니다
자주 사용하는 리액트 훅 (2)
React에서 구조와 렌더링 타이밍을 다루기 시작하면서 사용하게 된 훅들을 정리합니다. useLayoutEffect, useContext, 커스텀 훅이 어떤 상황에서 유용했는지를 중심으로 기록합니다.
props drilling이 생겼던 구조와 당시 선택
React에서 상태를 상위로 끌어올리면서 발생한 props drilling 구조를 정리합니다. 중간 컴포넌트가 props를 전달만 하게 된 문제와, 그 시점에서 Context API를 선택지로 고려하게 된 이유를 기록합니다.
리액트에서 key를 사용하는 이유
React에서 리스트를 렌더링할 때 key가 왜 필수인지 정리합니다. React의 렌더링 방식과 index를 key로 사용할 때 발생하는 문제를 중심으로, 안정적인 key를 선택하는 기준을 기록합니다.
useState로 상태를 관리하다가 불편해지기 시작한 지점
React에서 useState로 상태를 관리하던 중, 페이지 이동·새로고침·뒤로가기 상황에서 상태가 유지되지 않았던 문제를 정리합니다.
clsx 다음에 tw-merge가 필요한 이유
Tailwind CSS에서 clsx로 조건부 클래스를 합친 뒤, tw-merge로 클래스 충돌을 정리하는 이유를 정리합니다. clsx와 tw-merge를 함께 사용하는 흐름과 cn 유틸 패턴을 설명합니다.
clsx / classnames를 언제, 왜 사용하는가
Tailwind CSS를 사용하며 조건부 클래스가 늘어날 때, clsx와 classnames를 언제, 왜 사용하게 되는지 정리합니다. 문자열 기반 클래스 처리의 한계와 정리 기준을 학습 관점에서 설명합니다.