아래의 코드를 작성하여 라이브러리를 설치한다.
npm install @reduxjs/toolkit react-redux
기존에 설치한 Redux 라이브러리가 존재한다면 package.json에서 삭제해준다.
// store -> index.js
import { createSlice } from '@reduxjs/toolkit';
const initialState = { counter: 0, showCounter: true };
const counterSlice = createSlice({
// 식별자
name: 'counter',
initialState,
reducers:{
// 자동으로 최신 state를 받는다.
increment(state) {
// 기존의 상태를 변경하는 것 같지만 변경되지 않는다.
// 내부적으로 immer라는 다른 패키지를 사용한다.
// 이런 코드를 감지하고 자동으로 원래 있느 상태를 복제하고 기존 상태를 변경하지 않도록해준다.
// 불변성을 신경쓰지 않아도 된다.
state.counter++;
},
decrement(state) {
state.counter--;
},
// action에 붙어있는 데이터가 필요할 때 사용하는 방법.
increase(state, action) {
state.counter = state.counter + action.amount;
},
toggleCounter(state) {
state.showCounter = !state.ShowCounter;
}
}
});
// counterSlice.reducer에 접근 가능하다.
// 프로젝트 규모가 커졌을 경우 문제가 생길 수 있다.
// ㄴ 일반적인 redux에서는 combineReducers를 사용한다.
// ㄴ redux-toolkit에서는 configureStore를 사용한다.
// configureStore는 createStore처럼 store를 생성한다.
// 여러 개의 리듀서를 하나의 리듀서로 쉽게 합칠 수 있다.
// redux
const store = createStore(counterSlice.reducer);
// redux-toolkit
const store = configureStore({
// reducer가 하나 일 경우
reducer: counterSlice.reducer
// reducer가 여러개 일 경우
reducer: { counter: counterSlice.reducer }
});
export const counterActions = counterSlice.actions;
// reudcer 사용하기
// payload가 없는 경우
dispatch(counterActions.increment());
// payload가 있는 경우
dispatch(counterActions.increase(10));