오늘은 Redux의 flow에 대해 공부를 해보았다.
> React-Redux에서 나오는 개념
react-redux가 제공하는 함수는 대부분 연결하는 기능을 제공한다.
> action
액션 생성 함수(addCart)가 실행되면 반환되는 값이 액션 객체!
액션 객체 : { type: "ADD_ITEM", payload: item }
액션은 type
과 payload
을 포함한 객체를 리턴
type
: 해당하는 액션 객체의 내용 (add_item
, add_like
, delete_item
등)
payload
: 인자로 받은 필요한 데이터
액션 객체를 dispatch
에 넣어서 호출 (useDispatch
)
> useDispatch
state는 dispatch를 통해서만 변경
import { useDispatch } from "react-redux";
import { 액션생성 함수 } from "../store/actions/index";
맨 뒤의 '/index'는 생략 가능하다
const dispatch = useDispatch();
dispatch( 액션생성함수(payload값) );
useDispatch
react-redux가 제공하는 hook
store의 내장 함수로서 액션 객체를 발행하는 함수이다.
액션을 발행한다는 건 말그대로 해당 함수를 발행!
(ex 장바구니 담기 함수)
dispatch의 인자는 액션 객체 dispatch( {action} )
dispatch
가 실행되면 reducer
를 호출해서 state
값을 바꾼다
onClick에 dispatch
를 걸어놓는다 => action
생성 함수 발행 => action
객체를 return => type, payload
포함한 객체가 reducer
로 간다.
> reducer(state, action)
function counter(state, action) {
switch (action.type) {
case 'INCREASE':
return state + 1;
case 'DECREASE':
return state - 1;
default:
return state;
}
}
useReducer 에선 일반적으로 default: 부분에 throw new Error('Unhandled Action')과 같이
에러를 발생시키도록 처리하는게 일반적인 반면,
리덕스의 리듀서에서는 기존 state를 그대로 반환하도록 작성해야 한다.
state값을 변경하는 분배기 역할
액션이 발생했을 때 store를 업데이트 시키는 함수
return 해주는 값이 새로운 state
값으로 store
에 저장된다!
reducer
는 현재 state
와 전달 받은 action
을 참조하여
새로운 state
값을 return한다.
해당하는 type
과 동일한 case
를 판별해서 인자로 받은 payload
를 가지고 state
를 변경하는 것이다.
const [state, setState] = useState(INITIAL_STATE)
와 비교reducer
가 return하는 state
가 setState
와 동일!> combineReducers
여러개의 리듀서를 만들고 이를 합쳐서 루트 리듀서 (Root Reducer)를 만들 수 있다.
export default combineReducers
를 최상위 index.js에서
import rootReducer
로 받는다.
> store
리덕스에서는 한 애플리케이션당 하나의 store를 만든다.
store 안에는 state
, reducer
, 몇가지 내장 함수
가 들어있다.
store는 state값을 가지는 단일 객체
최상위 index.js
의 store
에
export된 combineReducer
를 하나의 rootReducer
로 불러온다
결국 rootReducer
가 store
가 되는 것이고
const store = createStore( rootReducer )
가 하나의 "컨테이너"가 된다.
형성된 store
컨테이너가 <Provider store={store}>
컴포넌트를 통해서 <Routes />
를 감싸준다
이를 통해 우리가 렌더링하는 그 어떤 컴포넌트던지 리덕스 스토어에 접근 할 수 있게 된다.
> useSelector
useSelector
useSelector
store
에 있는 state
를 꺼내올 때 사용
reducer ⇒ store의 key
> useDispatch vs useSelector 비교
우영님 정리 잘하셨네여 👍