Redux (2)

Redux (2)


🚀 redux 작동방식

  • 우리는 모든 애플리케이션 상태(데이터)를 Store라는 단일 위치에 저장. 프런트엔드용 데이터베이스로 저장
  • 3가지 주요 부분
    • Store - 모든 데이터를 저장
    • Reducer - 데이터를 추가, 업데이트 및 삭제하는 기능(사용 방법) •
    • Actions - 수행할 작업(무엇을 해야 하는지)을 정의
  • Reducer 기능을 통해서만 Store 데이터를 변경할 수 있습니다..
  • 할일 목록 만들기
    • Action - ADD_TASK
    • Reducer - perform how to add task in the store

📌 Redux 구현을 위한 4단계:

  • Designing the store - Store 객체의 모습
  • List actions - 애플리케이션에서 수행
  • 리듀서 만들기 - 해당 작업을 수행하는 방법을 정의하는 기능
  • 리덕스 스토어 생성

💻Creating Reducer function:

  • 감속기는 두 개의 인수를 받는 순수 함수입니다. 첫 번째는 초기 또는 현재 상태이고 두 번째는 작업 개체
  • 이 함수 내에서 If..else를 사용하거나 Switch 케이스를 사용하여 작업 유형을 식별할 수 있습니다.
let id = 0;
export default function reducer(state = [], action) {
  switch (action.type) {
    case ADD_TASK:
      return [
        ...state,
        {
          id: ++id,
          task: action.payload.task,
          completed: false,
        },
      ];
    case REMOVE_TASK:
      return state.filter((task) => task.id !== action.payload.id);
    case TASK_COMPLETED:
      return state.map((task) =>
        task.id === action.payload.id
          ? {
              ...task,
              completed: true,
            }
          : task
      );
    default:
      return state;
  }
}

📜 redux 스토어 구성

  • 리덕스 스토어를 생성하기 위해 우리는 리덕스 라이브러리에 createStore라는 함수가 있고 루트 리듀서를 매개변수로 전달하기만 하면 됌.
import { legacy_createStore as createStore } from "redux";
import reducer from "./tasks";
const store = createStore(reducer);
export default store;

🧑🏻‍💻  Store에서 데이터 전달

  • 어떤 액션을 발송하려면 store.dispatch 메소드를 사용해야 하고 type 속성(액션 이름)과 페이로드 속성(액션과 관련된 데이터를 전달할 수 있음)을 가진 액션 객체를 전달해야 됌.
store.dispatch({ type: "ADD_TASK", payload: { task: "Add new task" } });

🔔구독 및 탈퇴 방법

  • YouTube에서 구독 기능을 사용함에 따라 store.subscribe 메서드는 스토어 개체에 변경 사항이 있을 때 알림을 받는 데에도 사용
store.subscribe(() => {
  console.log("Updated", store.getState());
});
  • 이 콜백 함수는 redux 스토어의 모든 변경 사항에서 실행.
  • 이제 이 구독 방법을 중지하려면 구독 취소를 사용해야함.
const unsubscribe = store.subscribe(() => {
  console.log("Updated", store.getState());
});
unsubscribe();

🚀redux-devTools 구성 방법

npm i redux-devtools-extension 또는 yarn add redux-devtools-extension
  • configureStore 파일에서 이 라이브러리를 사용하여 라이브러리를 설치 하고 이 라이브러리에서 devToolsEnhancer를 가져옴.
import { legacy_createStore as createStore } from "redux";
import { devToolsEnhancer } from "redux-devtools-extension";
import reducer from "./tasks";
 
const store = createStore(reducer, devToolsEnhancer({ trace: true }));
 
export default store;
  • 또한 이 확장으로 추적을 수행할 수 있으며 이 확장에서 로그 파일을 가져오고 내보낼 수도 있음.