redux를 사용하면 상태 관리가 편리하다는 장점이 있지만 reducer와 action을 따로 관리해야하기 때문에 코드의 양이 늘어난다는 번거로움이 있더라구요
그래서 이번 글은 비교적 간단한 코드로 상태 관리를 할 수 있게끔 도와주는, createSlice라는 redux-toolkit에 대한 내용입니다
createSlice()
: 리듀서 함수의 객체, 슬라이스 이름, 초기 상태 값을 받아들이고 해당 액션 생성자와 액션 유형으로 슬라이스 리듀서를 자동으로 생성합니다
이 전의 코드들은 위와 같은 구조를 가지고 있었습니다. createSlice를 이용하면 action과 reducer를 하나의 파일에서 관리할 수 있습니다
createAction, createReducer 함수가 내부적으로 사용되며, createSlice에 선언된 슬라이스 이름(아래 예시 코드의 name 부분)을 따라서 reducer와 action 생성자, action type을 자동으로 생성합니다
// SearchSlice.tsx
import { createSlice } from '@reduxjs/toolkit'
const SearchSlice = createSlice({
name: "reducers",
initialState: {
list: []
},
reducers: {
addToList(state, action) {
state.list = action.payload
}
}
})
// action과 reducer를 export 해줍니다
export const searchAction = SearchSlice.actions
export const searchReducer = SearchSlice.reducer
// Main.tsx
import {searchAction} from "./components/store/SearchSlice";
import {useDispatch} from "react-redux";
const dispatch = useDispatch();
...
dispatch(searchAction.addToList(response.data));
위처럼 createSlice를 사용하면 action type, action 생성 함수, reducer까지 한번에 작성할 수 있습니다
dispatch 하는 방법은 동일합니다. 앞서 export 해준 action을 dispatch 함수의 파라미터로 넣어줍니다
주의할 점
값을 payload 자체로 보내기 때문에, 값이 어떤 구조로 되어있는지 파악하여 reducer에서 값을 어떻게 받게 할 것인지 주의해야 합니다.
이 부분은 아직 공부 중이라 내용 채워넣을 예정 !
개념은 알겠는데 실제로 사용하려고 하면 막히는 부분이 많네요
어려워요
reducer, action을 따로 작성하는 것이 가독성은 좀 더 좋지만, createSlice를 사용하는 것이 코드의 양을 줄여주는 것 같네요