모던 리액트 Deep Dive - 상태관리

2025. 12. 9. 22:08·Study/모던 리액트 Deep Dive

⚡5.1 상태관리의 필요성

상태란 흔히 웹 애플리케이션을 개발할때 이야기하는 상태는 어떠한 의미를 지닌 값이며, 애플리케이션의 시나리오에 따라 지속적으로 변경될 수 있는 값을 의미함 (UI, URL, form, 서버에서 가져온 값)

5.1.1 리액트 상태관리의 역사

🌕Flux 패턴 

  • 단방향으로 데이터 흐름을 변경하는 것 (양방향 데이터 바인딩 / 코드의 양이 많아지고 변경시나리오가 복잡

💡 Flux패턴의 용어

  • action : 어떠한 작업을 처리할 액션과 그 액션이 발생시 함께 포함시킬 데이터를 의미
  • dispatcher : 액션을 스토어로 보내는 역할
  • store : 실제 상태에 따른 값과 상태를 변경할 수 있는 메서드를 가짐
  • view :  리액트의 컴포넌트에 해당하는 부분

양방향 데이터 바인딩은 데이터 흐름은 모두 액션이라는 한 방향으로 줄어드므로 데이터의 흐름을 추적하기 쉽고 코드를 이해하기가 수월해짐

🌕리덕스의 등장

  • 리덕스는 대표적인 Flux 패턴을 사용하는 상태관리 라이브러리이고 Elm 아키텍처를 도입
  • 리덕스는 하나의 상태 객체를 스토어에 저장해 두고, 이 객체를 업데이트하는 작업을 디스패치해 업데이트를 수행함

🌕Context API와 useContext

🌕훅의 탄생 그리고 React Query와 SWR

  • 두 라이브러리 모두 외부에서 데이터를 불러오는 fetch를 관리하는 데 특화된 라이브러리지만, API 호출에 대한 상태를 관리하기 때문에 HTTP 요청에 특화된 상태 관리 라이브러리임

🌕 Recoil, Zustand, Jotai, Vlatio에 이르기까지

  • 16.8 이상의 버전을 요구하고 있고 작은 크기의 상태를 효율적으로 관리하기 좋은 라이브러리

5.2.1 가장 기본적인 방법 : useState와 useReducer

  • useState의 등장으로 리액트에서는 여러 컴포넌트에 걸쳐 손쉽게 동일한 인터페이스의상태를 생성하고 관리할 수 있게 됨
  • useCounter라는 훅을 만들어서 함수형 컴포넌트 어디서든 사용할 수 있게 구현가능
function useCounter(init: number = 0) {
	const[counter, setCounter] = useState(init)
    
    function inc() {
    	setCounter((prev) => prev + 1)
    }
    
    return {counter, inc}
}

 

  • 리액트의 훅을 기반으로 만든 사용자 정의 훅은 함수 컴포넌트에서 재사용 가능하다는 장점
  • 실제 useReducer를 타입스트립트로 작성하려면 다양한 오버로딩이 필요함
  • useState나 useReducer 모두 약간의 구현 상의 차이만 있을 뿐, 두 훅 모두 지역 상태 관리를 위해 만들어짐

5.2.2 지역상태의 한계를 벗어나보자 : useState의 상태를 바깥으로 분리하기

  • useState의 한계는 리액트가 만든 클로저 내부에서 관리되어 지역 상태로 생성되기 때문에 해당 컴포넌트에서만 사용할 수 있다는 것
  • useState로 컴포넌트의 리렌더링을 실행하여 최신값을 가져오는 방법은 해당 컴포넌트에서만 유효한 전략임 즉, 반대쪽의 다른 컴포넌트에서는 상태 변화에 따른 리렌더링을 일으킬 무언가가 없기 때문에 렌더링되지 않기 때문

💡함수외부에서 상태를 참조하고 렌더링까지 자연스럽게 일어나려면 다음과 같은 조건을 만족해야 함

1. 컴포넌트 외부 어딘가에 상태를 두고 여러 컴포넌트가 같이 쓸 수 있어야 함

2. 외부에 있는 상태를 사용하는 컴포넌트는 상태의 변화를 알아챌 수 있어야 하고, 상태가 변할 때마다 리렌더링이 일어나서 컴포넌트를 최신 상태값 기준으로 렌더링해야 함. 상태 감지는 상태를 변경시키는 컴포넌트뿐 아니라 상태를 참조하는 모든 컴포넌트에서 동일하게 작동해야 함

3. 상태가 윈시 값이 아닌 객체인 경우, 객체에 내가 감지하지 않는 값이 변한다 하더라도 리렌더링이 발생해서는 안됨

이 3가지를 만족시킬 수 있는 것이 store임

 

'Study > 모던 리액트 Deep Dive' 카테고리의 다른 글

모던 리액트 Deep Dive - Next.js  (0) 2025.11.23
모던 리액트 Deep Dive - 서버 사이드 랜더링을 위한 리액트 API  (0) 2025.11.10
모던 리액트 Deep Dive - 리액트 훅과 고차 컴포넌트  (0) 2025.11.01
모던 리액트 Deep Dive - 리액트 훅  (1) 2025.10.22
모던 리액트 Deep Dive - 메모이제이션  (0) 2025.10.14
'Study/모던 리액트 Deep Dive' 카테고리의 다른 글
  • 모던 리액트 Deep Dive - Next.js
  • 모던 리액트 Deep Dive - 서버 사이드 랜더링을 위한 리액트 API
  • 모던 리액트 Deep Dive - 리액트 훅과 고차 컴포넌트
  • 모던 리액트 Deep Dive - 리액트 훅
happy_dev
happy_dev
복사하고 붙여넣기 잘하고 싶어요
  • happy_dev
    happy의 개발일지
    happy_dev
  • 전체
    오늘
    어제
    • 전체 (43)
      • Java (0)
      • React (1)
      • DB (1)
      • Study (41)
        • 친절한 SQL 튜닝 (9)
        • 모던 리액트 Deep Dive (18)
        • 젠킨스로 배우는 CI,CD 파이프라인 구축 (14)
        • Studyd (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Jenkins
    oracle
    DB
    인덱스의기본
    toad
    SQL
    리액트
    젠킨스
    조인
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
happy_dev
모던 리액트 Deep Dive - 상태관리
상단으로

티스토리툴바