*보일러플레이트 코드: 복잡한 설정 과정이나 반복적으로 필요한 초기 코드
슬라이스(Slice) 관리: createSlice를 통해 상태, 리듀서, 액션 생성자를 하나의 슬라이스로 통합하여, 반복적인 코드 없이도 상태 관리가 가능
주요 속성 - name, initialState, reducers, extraReducers
createSlice로 생성된 슬라이스 객체의 주요 속성 - name, reducer, actions, caseReducers
name
슬라이스의 이름을 나타내며, 주로 action 타입을 생성할 때 사용
이 name 속성은 액션 타입이 sliceName/actionName 형식
(예 'product/getSingleProduct')
reducer
actions
caseReducers
npm install @reduxjs/toolkit
// 기존 dedux 제거(option)
npm uninstall reduximport {createSlice} from "@redux/toolkit"
let initialState = {
productList: [],
productDetailList: null,
};
// createSlice 3가지요소 name, initialState,reducers
// action 이름을 만드는데 name이라는 키가 쓰임
const productSlice = createSlice({
name:"product",
initialState,
reducers:{
// 전체 상품보여주는 리듀서
getAllProducts(state,action){
state.productList = action.payload
},
// 상품 한개만 보여주는 리듀서
getSingleProduct(state,action){
state.productDetailList = action.payload
}
}
})
// actions에 Slice에서 정의한 action들이 담겨있음
export const productActions = productSlice.actions
// reducer에 모든 reducers들이 나
export default productSlice.reducer;
// createSclice 속성
// actions, caseReducers,getInitialState,reducer
import productReducer from './reducer/productReducer';
import authenticateReducer from './reducer/authenticateReducer';
import { configureStore } from '@reduxjs/toolkit';
// 여러 reducer들 통합파일 안만들어줘도 됨
// thunk, applyMiddleware, composeWithDevTools 따로 설정 안해줘도 됨
// 모두 자동셋업 되어 있음
let store = configureStore({
reducer: {
auth: authenticateReducer,
product: productReducer,
},
});
export default store;
import { productActions } from '../reducer/productReducer';
function getProducts(){
// data 있다고 가정
dispatch(productActions.getAllProducts(data));
};
}
function getProductDetail() {
return async (dispatch, getState) => {
dispatch(productActions.getSingleProduct(data));
};
}
export const productAction = { getProducts, getProductDetail };