리덕스의 주요 개념
리덕스의 흐름 도식화
View에서 액션이 일어남.
dispatch에서 action이 일어남.
aiction에 의한 reducer 함수가 실행되기 전 middleware 작동.
middleware에서 명령 내린 일을 수행하고 난 뒤 reducer 함수 실행.
reducer의 실행 결과 store에 새로운 값 저장.
store의 state에 subscribe하고 있던 UI에 변경된 값을 준다.
기능 구현해보기
// src/App.js
import React from "react";
import { useDispatch, useSelector } from "react-redux";
const App = () => {
const dispatch = useDispatch();
const number = useSelector((state) => state.counter.number);
return (
<div>
{number}
<button
onClick={() => {
dispatch({ type: "PLUS_ONE" });
}}
>
+ 1
</button>
<button
onClick={() => {
// 액션객체 디스패치
dispatch({ type: "MINUS_ONE" });
}}
>
- 1
</button>
</div>
);
};
export default App;
// src/modules/counter.js
// 초기 상태값
const initialState = {
number: 0,
};
// 리듀서
const counter = (state = initialState, action) => {
switch (action.type) {
case "PLUS_ONE":
return {
number: state.number + 1,
};
// action.type이 MINUS_ONE 일 때 새로운 state 반환
case "MINUS_ONE":
return {
number: state.number - 1,
};
default:
return state;
}
};
// 모듈파일에서는 리듀서를 export default 한다.
export default counter;
정리