리덕스를 더 편하게 쓰기 위한 기능들을 흠수해서 만든 것
리덕스의 전체 코드의 양을 줄이기 위해 새로운 API가 추가되었고 ducks 패턴의 요소들이 자동화 되었다.
Redux Toolkit은 Redux 로직을 작성하기 위한 표준 방식이 되도록 만들어졌고, 공식문서에서 리덕스 튤킷을 사용하는 것을 강력히 추천하고 있다.
yarn add @reduxjs/toolkit
기존 코드에선 액션 타입 정의와 액션 생성 함수, 리듀서를 각각 만들어줬어야 했다.
// 1) Action value
const ADD_NUMBER = "counter/ADD_NUMBER";
const MINUS_NUMBER = "counter/MINUS_NUMBER";
// 2) Action creator : action value를 return 하는 함수
export const plusN = (payload) => {
return {
type: ADD_NUMBER,
payload,
};
};
export const minusN = (payload) => {
return {
type: MINUS_ONE,
payload,
};
};
// Initial State
const initialState = {
number: 0,
};
// 3) Reducer
const counter = (state = initialState, action) => {
switch (action.type) {
case ADD_NUMBER:
return {
number: state.number + action.payload,
};
// [퀴즈 답]
case MINUS_NUMBER:
return {
number: state.number - action.payload,
};
default:
return state;
}
};
// export default reducer
export default counter;
Action Value와 Action Creator를 직접 생성해주지 않아도 된다.
Slice라는 API를 통해 Action Value, Action Creator, Reducer를 모두 만들어줄 수 있다.
slice API
1. export action creator
2. export reducer
3. action value
// TODO
// RTK의 Slice API를 사용한 경우
import { createSlice } from "@reduxjs/toolkit";
const counterSlice = createSlice({
name: "counter",
initialState,
reducers: {
addNumber: (state, action) => {
state.number = state.number + action.payload;
},
minusNumber: (state, action) => {
state.number = state.number - action.payload;
},
},
});
export default counterSlice.reducer; // reducers를 default로 export
export const { addNumber, minusNumber } = counterSlice.actions; // action creator export
// ASIS : 일반 리듀서
const rootReducer = combineReducers({
counter,
users,
todos,
});
const store = createStore(rootReducer);%% %%
// TODO: RTK
// configureStore 사용
// reducer 안에 각 모듈의 slice.reducer를 추가
const store = configureStore({
reducer: {
counter,
todos,
users,
},
});
export default store;