https://velog.io/@optimist5235/redux-...-뭔지-진짜-간단하게-설명해줌....2편
세팅이 완료되었으면 사용하는방법을 알아야된다.
그전에 리덕스의 작동원리부터 알아보자
1. View 에서 액션이 일어난다.
2. dispatch 에서 action이 일어나게 된다.
3. action에 의한 reducer 함수가 실행되기 전에 middleware가 작동한다.
4. middleware 에서 명령내린 일을 수행하고 난뒤, reducer 함수를 실행한다. (3, 4번은 아직 몰라도 됩니다!)
5. reducer 의 실행결과 store에 새로운 값을 저장한다.
6. store의 state에 subscribe 하고 있던 UI에 변경된 값을 준다.
출처:https://velog.io/@annahyr/%EB%A6%AC%EB%8D%95%EC%8A%A4-%ED%9D%90%EB%A6%84-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
위에 움짤과 설명을 보면 쉽게 이해가 된다.
파일구성
App.js 코드
import React from "react";
import { useDispatch, useSelector } from "react-redux"; // 1번 import 해주기. 어차피 디스패치 셀렉트 둘 다사용할것이니
const App = () => {
const dispatch = useDispatch(); // 4번 dispatch 생성
// use selector 추가
const number = useSelector((state) => state.counter.number);
console.log(number); // 콘솔 추가
return (
<div>
{number}
{/*
2번 버튼 틀 만들기
3번 엑션객체 디스패치하기 마우스를 클릭했을 때 dispatch가 실행되고, ()안에 있는 액션객체가 리듀서로 전달된다. */}
<button
onClick={() => {
dispatch({ type: "PLUS_ONE" });
}}
>
+ 1
</button>
</div>
);
};
export default App;
couter.js 코드
// 5번 초기 상태값 정하기
const initialState = {
number: 0,
};
// 6번 리듀서 로직 구현
const counter = (state = initialState, action) => {
console.log(action);
switch (action.type) {
// PLUS_ONE이라는 case를 추가한다. 여기서 case란, action.type을 의미한다.
// dispatch로 전달받은 action의 type이 "PLUS_ONE" 일 때 아래 return 절이 실행된다.
case "PLUS_ONE":
return {
// 기존 state에 있던 number에 +1을 더한다.
number: state.number + 1,
};
default:
return state;
}
};
// 모듈파일에서는 리듀서를 export default 한다.
export default counter;
configStore.js 코드
// 원래 있던 코드
import { createStore } from 'redux';
import { combineReducers } from "redux";
// 7번 카운터.js 추가하기
import counter from "./modules/counter";
const rootReducer = combineReducers({
counter: counter, // <-- 새롭게 추가한 부분
});
const store = createStore(rootReducer);
export default store;