Redux-toolkit์ redux ์ฝ๋๋ฅผ ๋จ์ํํ๊ธฐ ์ํ ๋งค์ฐ ์ ๋ช
ํ๊ณ ๊ฐ๋ ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ Redux์์ ๊ณต์์ ์ผ๋ก ๊ถ์ฅํฉ๋๋ค. Redux-toolkit์๋ store, createAction, createReducer ๋ฐ createSlice๋ฅผ ๊ตฌ์ฑํ๋ ๋ง์ ๋ฉ์๋๊ฐ ์์ต๋๋ค. configureStore ๋ฉ์๋๋ redux ์คํ ์ด๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ redux-devTools๋ฅผ ์๋์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค.ย ๋ฐ๋ผ์ devtoolsEnhancer ๊ธฐ๋ฅ์ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ payload ์์ฑ์ ์ฌ์ฉํ์ฌ ์์
๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ createAction ๋ฉ์๋๋ฅผ ๋ด
๋๋ค. import { createAction } from ' @reduxjs/toolkit ' ;
const addTask = createAction ( ' ADD_TASK ' );
console . log ( addTask ({ task : ' Add new task! ' }));
//Output in console
{ type : ' ADD_TASK ' , payload : { task : ' Add new task! ' } }
๊ทธ๋ฐ ๋ค์ switch case ๋๋ If..else๋ฅผ ์์ฑํ์ง ์๊ณ ๋ฆฌ๋์ ํจ์๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ createReducer ํจ์. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์๋ ํ๋์ ํจ์์์ ์ก์
๊ณผ ๋ฆฌ๋์๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ createSlice ํจ์๊ฐ ์์ต๋๋ค.ย ์ด๋ ์ฝ๋๋ฅผ ๊นจ๋ํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๋ฐ ๋งค์ฐ ์ ์ฉํจ. import { createSlice } from " @reduxjs/toolkit " ;
let id = 0 ;
const taskSlice = createSlice ({
name : " tasks " ,
initialState : [],
reducers : {
// action: function
addTask : ( state , action ) => {
state . push ({
id : ++ id ,
task : action . payload . task ,
completed : false ,
});
},
removeTask : ( state , action ) => {
const index = state . findIndex (( task ) => task . id === action . payload . id );
state . splice ( index , 1 );
},
completedTask : ( state , action ) => {
const index = state . findIndex (( task ) => task . id === action . payload . id );
state [ index ]. completed = true ;
},
},
});
export const { addTask , removeTask , completedTask } = taskSlice . actions ;
export default taskSlice . reducer ;
redux-toolkit์ ์ฌ์ฉํ๋ค๋ฉด ๊ฐ์ฒด์ฒ๋ผ ๋ฆฌ๋์๋ฅผ ๊ฒฐํฉํ ์ ์์. import { configureStore } from " @reduxjs/toolkit " ;
import employeeReducer from " ./employees " ;
import taskReducer from " ./tasks " ;
const store = configureStore ({
reducer : {
tasks : taskReducer ,
employees : employeeReducer ,
},
});
export default store ;
ยฉ 2021. All rights reserved. LICENSE | NOTICE | CHANGELOG