Redux
는 자바스크립트 앱을 위한 예측 가능한 상태 컨테이너이다.
그럼 언제 사용하는 것이 좋을까?? 기본적으로 react의 기능만으로 대응하기 힘들 정도로 애플리케이션의 상태 관리가 복잡해졌다고 확실히 판단이 되었을 때 사용하는 것이 좋다.
Draw by 승현 손
유저가 사용하는 화면, 버튼, react 컴포넌트 등의 UI 구성 요소
export const addCart = (item) => { // 액션 "생성 함수"
return {
type: "ADD_ITEM", // 액션 "객체"
payload: item,
};
};
const ADD_TODO = {
type: "ADD_TODO",
payload: { content: "출근하기", priority: 1 }
}
(preciousState,action) => newState
의 형태를 가지고, 순수함수이며 예측 가능해야 한다.// Array.prototye.reduce()
const cart = [
{ id: 1, name: "청바지", price: 10000, quantity: 2 },
{ id: 2, name: "반바지", price: 10000, quantity: 1 },
{ id: 3, name: "반팔", price: 10000, quantity: 2 },
];
const totalPrice = cart.reduce((acc, cur) => {
return acc + cur.price * cur.quantity
}, 0);
redux의 Reducer 역시 Store와 Action을 받아 새로운 Store로 값을 합쳐 내보낸다
const INITIAL_STATE = [];
// redux/cart.js
export default function cartReducer(state = INITIAL_STATE, action) {
switch (action.type) {
case "ADD_ITEM":
return [...state, action.payload]; // 이전 상태에 새로운 item을 추가
case "DELETE_ITEM":
return state.filter((product) => product.id !== payload.id);
default:
return state; // 해당 사항 없으면 이전 상태를 그대로 리턴
}
}
// redux/index.js
import { combineReducers } from "redux";
import cartReducer from "./cartReducer";
export default combineReducers({ cartReducer });
(state, action)=>newState
형태의 로직을 가져야 한다.스토어의 쌩얼
// redux-thunk
export default function thunkMiddleware({ dispatch, getState }) {
return next => action =>
typeof action === 'function' ?
action(dispatch, getState) :
next(action);
}
출처 westudy