JiSoo's Devlog

[Redux] Redux Toolkit 본문

Frontend/Redux

[Redux] Redux Toolkit

지숭숭숭 2024. 7. 5. 21:19

Redux Toolkit

간단하게 말하면 많은 지름길들이 있는 Package라고 보면 된다

적은 양의 Redux 코드로 같은 기능을 하도록 도와주는 것 !

 

npm install @reduxjs/toolkit
or
yarn add @reduxjs/toolkit

 

 

createAction

const ADD = "ADD";
const DELETE = "DELETE";

const addToDo = text => {
  return {
    type: ADD,
    text
  };
};

const deleteToDo = id => {
  return {
    type: DELETE,
    id: parseInt(id)
  };
};

↓ ↓ ↓ ↓

const addToDo = createAction("ADD");
const deleteToDo = createAction("DELETE");

console.log(addToDo(), deleteToDo());

 

createAcion은 Redux action type 및 creator를 정의하기 위한 helper 함수

action에 무엇을 보내든 간에 항상 payload와 함께 보내게 된다

const reducer = (state = [], action) => {
  switch (action.type) {
    case addToDo.type:
      return [{ text: action.payload, td: Date.now() }, ...state];
    case deleteToDo.type:
      return state.filter((toDo) => toDo.id !== action.payload);
    default:
      return state;
  }
};

 

 

createReducer()

createReducer를 사용하면 state를 mutate 하기 쉽게 만들어준다

state를 mutate 하는 이유는 Redux 툴킷이 Immer(이머) 아래에서 작동하기 때문

뭔가를 리턴할 때는 꼭 새로운 state여야 한다

const reducer = createReducer([], {
  [addToDo]: (state, action) => {
    state.push({ text: action.payload, id: Date.now() });
  },
  [deleteToDo]: (state, action) =>
    state.filter((toDo) => toDo.id !== action.payload),
});

switch, case를 사용할 필요가 없게 해 주고 첫 번째 인자인 빈 array에 새로운 toDo를 push 해준다

push는 아무것도 리턴하지 않고 state를 mutate 해준다

filter는 state를 mutate 하지 않고 새로운 array를 리턴한다

 

 

configureStore

원할 때 언제든 Redux Developer Tools를 사용할 수 있다

const store = configureStore({ reducer });

 

 

createSlice

createSlice는 reducer뿐만 아니라 actions도 생성해 준다

const toDos = createSlice({
  name: "toDosReducer",
  initialState: [],
  reducers: {
    add: (state, action) => {
      state.push({ text: action.payload, id: Date.now() });
    },
    remove: (state, action) =>
      state.filter((toDo) => toDo.id !== action.payload),
  },
});

 

728x90

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

[Redux] React Redux  (0) 2024.06.25
[Redux] Pure Redux:To Do List  (0) 2024.06.24
[Redux] Introduction & Pure Redux:Counter  (0) 2024.06.24