😱 과거의 나. 꽤 단호했따....
const [상태명, 디스패치] = useReducer(리듀서 함수, 상태 초깃값)
어엇... 디스패치? 리듀서 함수? .....구냥 useState로 하나씩 할래요
import React, { useReducer } from "react";
const initialState = {
count: 0,
};
const reducer = (state, action) => {
if (action.type === "increment") {
return { count: state.count + 1 };
} else if (action.type === "decrement") {
return { count: state.count - 1 };
}
};
const App = () => {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<>
<h1>{state.count}</h1>
{/* 디스패치에 타입이 디크리먼트인걸 담아서 보냄 */}
<button
onClick={() => {
dispatch({ type: "decrement" });
}}
>
-
</button>
<button
onClick={() => {
dispatch({ type: "increment" });
}}
>
+
</button>
</>
);
};
export default App;
const initialState = {
count: 0,
};
const reducer = (state, action) => {
if (action.type === "increment") {
return { count: state.count + 1 };
} else if (action.type === "decrement") {
return { count: state.count - 1 };
}
};
action 작성방법 - 객체로 개별적으로 모아두는 정의가 가능
const action = {
type: 'increase'
};
const [state, dispatch] = useReducer(reducer, initialState);
<button
onClick={() => {
dispatch({ type: "decrement" });
}}
>
🧔🏻♂️button태그(CEO:쎄오): dispatch(비서)님, type(상세요구서)서류 준비해놨어요. 처리 부탁드려요.
useReducer 은행
👩🦰dispatch(비서): 안녕하세요.reducer(은행원)님 업무를 처리하러 왔습니다.
🙍♀️reducer(은행원): 아, action(주문서)를 확인해보니까 type(상세요구내용)이 "decrement"네요. 처리해드릴게요
₩ state의 변화(출금했음)