Cmarket Shopping App은 Create React App으로 만든 React 애플리케이션에 Redux를 붙인 구조다.
아이템 리스트 페이지(ItemListContainer)와 장바구니 페이지(ShoppingCart) 총 두 페이지로 간단하게 구성된다.
Store의 initial state에는 전체 아이템 목록(items), 장바구니 목록(cartItems)이 들어있다.
각 ItemListContainer, ShoppingCart 페이지 컴포넌트 및 components 폴더의 여러 컴포넌트들에서 Store(state)에 접근.
(Redux에서 제공하는 hooks, useDispatch, useSelector를 사용.)
<button className="item-button"
onClick={(e) => handleClick(e, item.id)}>장바구니 담기</button>
const handleClick = (item) => {
if (!cartItems.map((el) => el.itemId).includes(item.id)) {
dispatch(addToCart(item.id))
...
export const addToCart = (itemId) => {
return {
type: ADD_TO_CART,
payload: {
quantity: 1,
itemId
}
}
}
switch (action.type) {
case ADD_TO_CART:
return{...state, cartItems: [...state.cartItems, action.payload]}
const rootReducer = combineReducers({
itemReducer,
notificationReducer
});
const store =
createStore(rootReducer, composeEnhancers(applyMiddleware(thunk)));
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);