Redux Toolkit
Redux Toolkit 이란?
기존 Redux 구조를 좀 더 쉽게 해주는 도구들의 모음
새로운 것이 아니고, 구조나 패러다임이 모두 Redux와 동일하다.
React에서 렌더링을 발생시키기 위해서
불변성을 유지시켜야 하기 때문에
push 등 불변성을 유지시키지 않는 메서드의 사용을 할 수 없으나,
Toolkit에 포함된 immer
기능으로 사용이 가능해진다.
Redux Devtools : 아주 강력한 React 개발툴
React로 페이지를 구성하면서 state가 다양하고 많이 변경되는데
크롬 확장프로그램 Redux DevTools을 설치하면
Redux로 구성된 페이지에서 활성화 되며,
실행되고 있는 부분, state의 변화, test 등 유용한 기능을 제공한다.
yarn add @reduxjs/toolkit
위 코드로 설치하는 것으로 시작한다.
store를 만드는 부분, module을 만드는 부분을
Toolkit을 사용해 아주 간소하게 작성할 수 있다.
아래 예시 코드로 보자.
Store 생성
기존 스토어 생성 방법이 아래 코드 였다면
// 기본 Redux cofigStore.js
const rootReducer = combineReducers({
counter,
});
const store = createStore(rootReducer);
export default store;
Toolkit을 사용하면
// Toolkit configStore.js
const store = configureStore({
// 객체가 들어감
reducer: {
// reducer가 여려개일 수도 있기에 객체로 한 번더 묶어줌
counter,
},
//
});
export default store;
module 생성
module 또한 상당 부분 간소화 되는데,
기존 action value, action creator, reducer를 전부 따로 만들어줘야 했다면,
toolkit을 사용해 입력하는 코드를 많이 줄일 수 있다.
// 기본 Redux action value
const PLUS_ONE = "counter/PLUS_ONE";
const MINUS_ONE = "counter/MINUS_ONE";
// 기본 Redux action creator
export const plusOne = () => {
// action 객체를 return함
return {
type: PLUS_ONE,
};
};
export const minusOne = () => {
return {
type: MINUS_ONE,
};
};
const initialState = {
number: 0,
};
// 기본 Redux Reducer
Reducer;
const counter = (state = initialState, action) => {
// console.log(state)
switch (action.type) {
case PLUS_ONE:
// action 객체를 던져줄 때 액션의 type을 +1으로 해서 던져주겠다
return {
number: state.number + 1,
};
case MINUS_ONE:
return {
number: state.number - 1,
};
default:
return state;
}
};
위 코드는 Toolkit 사용전 기본 Redux 기본 양식으로, 상당히 길다.
// Redux Toolkit을 사용한 코드
import { createSlice } from "@reduxjs/toolkit";
const initialState = {
number: 0,
};
const counterSlice = createSlice({
name: "conter",
initialState,
reducers: {
// 여러개가 들어 갈 수 있음으로 객체로 묶음
plusNumber: (state, action) => {
state.number = state.number + action.payload;
},
minusNumber: (state, action) => {
state.number = state.number - action.payload;
},
},
});
// action creator와 reducer가 전부 들어있음
export default counterSlice.reducer;
export const { plusNumber, minusNumber } = counterSlice.actions; // action = reducers
Toolkit을 사용한 코드가 훨씬 간소화 된 것을 볼 수 있다.
‘reducers’ 안에 있는 plusNumber, minusNumber은 reducer인 동시에 action cerator가 되므로
기존 휴먼에러 방지와 코드를 일괄관리가 편하도록 설정해
reducer의 case에 위치했던 action value 또한 필요없어졌다.
Redux의 데이터 흐름을 파악하고 있다면 Toolkit을 사용해 코드를 간소화 하며,
좀 더 현업에 가깝게 코드를 만들어 갈 수 있을 것 같다.
댓글남기기