JiSoo's Devlog

[Redux] Introduction & Pure Redux:Counter 본문

Frontend/Redux

[Redux] Introduction & Pure Redux:Counter

지숭숭숭 2024. 6. 24. 18:18

Redux

Redux는 기본적으로 JavaScript Application들의 상태를 관리하는 방법

Redux가 React와 많이 사용하면서 유명해졌지만 React에 의존하는 라이브러리는 아니다!!

Angular, Vue.js, Vanilla JS에서도 모두 쓸 수 있다

 

Redux 설치

npm install redux
or
yarn add redux

 

 

Vanilla JS로 카운터 만들기

const add = document.getElementById("add");
const minus = document.getElementById("minus");
const number = document.querySelector("span");

let count = 0;
number.innerText = count;

const updateText = () => {
  number.innerText = count;
};

const handleAdd = () => {
  count = count + 1;
  updateText();
};

const handleMinus = () => {
  count = count - 1;
  updateText();
};

add.addEventListener("click", handleAdd);
minus.addEventListener("click", handleMinus);

 

 

 

Storedata를 저장하는 곳

state는 우리 애플리케이션에서 바뀌는 data

위에서 만든 코드에서 찾는다면 count가 state가 된다

 

리덕스에는 createStore이라는 함수가 있다

store가 하는 일은 기본적으로 data를 넣을 수 있는 장소를 생성한다

리덕스는 data 관리를 도와주는 역할을 하기 위해 만들어졌다

위의 코드의 경우 redux가 -1이나 +1을 count 하는 걸 도와주기 위해 만들어진 것

 

createStore 함수는 reducer를 요구한다

const reducer = () => {};
const store = createStore(reducer);

 

★ reducer는 내 data를 수정하는 걸 책임지는 함수!!!

reducer에서 return 하는 게 무엇이든지 애플리케이션의 data, state가 된다

리듀서는 current state와 action과 함께 불려진다

 

 

 

modifier와 reducer이 return하는 건 애플리케이션의 data가 되는 것

☆유일하게 한 개의 함수인 countModifier만 data를 modify 할 수 있다!

 

 

더보기

※ 리덕스 최신 버전에서는 createStore에 취소선이 그어지는데 작동은 문제없다

취소선을 없애고 싶다면 legacy_createStore를 쓰면 된다

 

default값을 0으로 설정하면 첫 번째 state, default state가 0이라는 뜻

const countModifier = (count = 0) => {
  return count;
};

 

 

 

action은 redux에서 함수를 부를 때 쓰는 두 번째 인자로 reducer와 소통하는 방법

action은 object여야 한다!

 

Reducer에게 action을 보내는 방법

store.dispatch({ })로 action을 보낼 수 있다

action은 type이 있어야 하는데 다른 이름을 불가능

dispatch로 메시지를 store에 보내서 action에 넣기

 

 

 

const handleAdd = () => {
  countStore.dispatch({ type: "ADD" });
};
const handleMinus = () => {
  countStore.dispatch({ type: "MINUS" });
};

add.addEventListener("click", handleAdd);
minus.addEventListener("click", handleMinus);

↑ 이렇게 버튼과 dispatch를 연결해 줄 수 있다

 

 

subscribestore안에 있는 변화 감지

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

countStore.subscribe(onChange);

이 함수는 store에 변화가 있을 때마다 감지해서 불려지게 된다

 

 

☆ 리덕스에서는 if else문보다 switch문을 자주 사용한다

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

 

☆ string을 바로 사용하는 대신 const variable로 선언해서 사용하기

const ADD = "ADD";
const MINUS = "MINUS";

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

 

 

728x90

'Frontend > Redux' 카테고리의 다른 글

[Redux] Redux Toolkit  (0) 2024.07.05
[Redux] React Redux  (0) 2024.06.25
[Redux] Pure Redux:To Do List  (0) 2024.06.24