import { createStore } from "redux";
import {
configureStore,
createAction,
createReducer,
createSlice,
} from "@reduxjs/toolkit";
const addToDo = createAction("ADD");
const deleteToDo = createAction("DELETE");
const reducer = createReducer([], {
[addToDo]: (state, action) => {
state.push({ text: action.payload, id: Date.now() });
},
[deleteToDo]: (state, action) => {
return state.filter((toDo) => toDo.id !== action.payload);
},
});
// const store = createStore(reducer);
const store = configureStore({ reducer: toDos.reducer });
// configureStore์ middleware(Redux Dev Tool)์ ํจ๊ป store๋ฅผ ์์ฑํ๋ค.
export const actionCreators = {
addToDo,
deleteToDo
};
export default store;
Redux Toolkit
์ ์ฌ์ฉํ๋ฉด state
๋ฅผ mutate
ํด๋ ๋๋ค. immer.js
์ ๊ฐ์ด ์๋ํ๊ธฐ ๋๋ฌธ์ด๋ค.
createReducer
์ ํ ๋์๋ 2๊ฐ์ง ์ต์
์ด ์๋ค.
1. ์๋ก์ด state
๋ฅผ return
ํ ์ ์๋ค => [{ text: action.payload, id: Date.now() }, ...state]
2. state
์์ฒด๋ฅผ mutate
ํ ์ ์๋ค. => state.push({ text: action.payload, id: Date.now() })
ํ์ง๋ง ๋ด๋ถ์ ์ผ๋ก 1๋ฒ๊ณผ ๊ฐ์ ์์
์ด ์ด๋ฃจ์ด์ง๊ณ ์๋ค.
import { createStore } from "redux";
import {
configureStore,
createAction,
createReducer,
createSlice,
} from "@reduxjs/toolkit";
const toDos = createSlice({
name: "toDoReducer",
initialState: [],
reducers: {
add: (state, action) => {
state.push({ text: action.payload, id: Date.now() });
},
remove: (state, action) => {
return state.filter((toDo) => toDo.id !== action.payload);
},
},
});
// const store = createStore(reducer);
const store = configureStore({ reducer: toDos.reducer });
// configureStore์ middleware(Redux Dev Tool)์ ํจ๊ป store๋ฅผ ์์ฑํ๋ค.
export const { add, remove } = toDos.actions;
export default store;
createSlice()
๋ internally createAction, createReducer
์ ์ฌ์ฉํ๋ค.
reducers: {}
์์ ์๋์ผ๋ก action
์ ์์ฑํ๋ค.