풀스택 웹개발 부트캠프 14주차 (2)

syxxne·2023년 10월 18일
0

부트캠프

목록 보기
35/42
post-thumbnail

Redux

  • JavaScript 상태 관리 라이브러리
  • 리액트를 배울 때 많이 나오는 용어지만, 리액트에 종속되는 개념 ❌
  • 리액트의 상태 관리 라이브러리로 가장 많이 사용됨
  • redux를 사용할 경우, 전역으로 상태를 관리할 수 있음
    → state를 props로 전달하지 않고, store에서 언제든지 꺼내 쓸 수 있음
npm i redux

state 종류

  • Local State
    • 각각의 컴포넌트가 소유하고 있는 상태
    • 해당 컴포넌트 내에서만 관리되고 사용됨
  • Cross-Component State
    • 두 개 이상의 컴포넌트 간에 공유되는 상태
    • props를 통해 상태 전달
  • App-Wide State
    • 어플리케이션의 전체 영역에서 사용되는 상태
    • 여러 컴포넌트 또는 어플리케이션 전체 영역에서 공유되어야 하는 데이터나 상태에 사용됨
  • Cross-Component & App-Wide State 일 때, Context APIRedux 필요

상태 관리

  • 초기 값을 저장함 → store의 초기 값 지정
  • 현재 값을 읽을 수 있음 → useSelector를 통해 state 읽음
  • 값을 업데이트할 수 있음 → reducer에 action 객체를 전달 (dispatch) 하여 state 업데이트

Store

  • 상태가 관리되는 공간
  • 데이터를 넣는 곳
  • 스토어 안에는 현재 어플리케이션 상태와 reducer가 들어가 있음
  • 한 개의 프로젝트는 하나의 스토어만 가질 수 있음
  • 스토어에 있는 데이터는 컴포넌트에서 직접 조작 ❌ → reducer 함수 사용

Action

  • 상태에 어떠한 변화가 필요하면 action 발생
  • action은 컴포넌트에서 스토어에 운반할 데이터
  • action은 하나의 객체로 표현됨
  • reducer가 수행할 작업을 설명
{
  type: "CHANGE_INPUT",
  text: "안녕하세요"
}

Dispatch

  • action을 발생시키는 것
  • dispatch(action) 과 같은 형태로 action 객체를 파라미터로 넣어서 호출

Reducer

  • action의 type에 따라 변화를 일으키는 함수
  • 데이터를 수정해주는 함수
  • 첫 번째 매개 변수는 현재 상태값, 두 번째 매개 변수는 action 값을 받음
  • 항상 새로운 상태 객체를 반환
  • ❌ HTTP 요청, 데이터 저장 같은 동작은 실행시키지 말 것 ❌
import { createStore } from "redux";

const reducer = (count = 0, action) => {
  switch (action.type) {
    case ADD:
      return count + 1;
    case MINUS:
      return count - 1;
    default:
      return count;
  }
};

const countStore = createStore(reducer);

const onChange = () => {
  number.innerText = countStore.getState();
};

countStore.subscribe(onChange);

countStore.dispatch({ type: "ADD" });
countStore.dispatch({ type: "MINUS" });
  • createStore(reducer 함수) : store 생성, reducer 함수 필수
  • getState( ) : createStore로 생성된 저장소에서 최신 상태의 값을 반환할 때 사용하는 메서드
  • subscribe( ) : 함수를 반환하며, 데이터와 저장소가 변경될 때마다 함수를 실행

Context API vs Redux

  • Context API
    • 상태 관리 도구 ❌ 전역적으로 상태를 공유해주는 기능 수행 ⭕
    • Provider를 선언한 부모 컴포넌트에서부터 useContext를 사용한 모든 자식 컴포넌트가 리렌더링
  • Redux
    • 상태 관리 도구 ⭕
    • state를 사용하고 있는 컴포넌트에서만 리렌더링
      참고

0개의 댓글