useReducer 소개
// Exam.jsx
import { useReducer } from "react";
// reducer : 변환기
// -> 상태를 변화시키는 변환기 역할
function reducer(state, action) {
switch (action.type) {
case "INCREASE":
return state + action.data;
case "DECREASE":
return state - action.data;
default:
return state;
}
}
const Exam = () => {
// dispatch : 발송하다, 급송하다
// -> 상태 변화가 있어야 한다는 사실을 알리는, 발송하는 함수
const [state, dispatch] = useReducer(reducer, 0);
const onClickPlus = () => {
// 인수 : 상태가 어떻게 변화되길 원하는지
// -> 액션 객체
dispatch({
type: "INCREASE",
data: 1,
});
};
const onClickMinus = () => {
dispatch({
type: "DECREASE",
data: 1,
});
};
return (
<div>
<h1>{state}</h1>
<button onClick={onClickPlus}>+</button>
<button onClick={onClickMinus}>-</button>
</div>
);
};
export default Exam;
useReducer란 useState랑 비슷하지만, 상태 관리 코드를 컴포넌트 외부로 분리할 수가 있다. dispatch 함수가 실행되면, 함수의 인수 첫 번째 자리에 았는 reducer 함수가 실행된다. 이 reducer 함수가 상태 변화를 일으키며, 이는 컴포넌트 외부에 있다. dispatch 함수에서 넘긴 액션 객체를 action과 state 값을 이용해 상태를 변화시킨다.
그렇다면 언제 useReducer을 사용할까? 배열 안에 객체가 들어가는 등의 복잡한 구조는 useReducer을, 카운터 앱같이 간단한 상태 변화는 useState을 주로 이용한다.
'프론트엔드 > 한 입 크기로 잘라먹는 리액트' 카테고리의 다른 글
| React.js - Context란, Context 사용하기, Context 분리하기 (0) | 2025.02.07 |
|---|---|
| React.js - useMemo와 연산 최적화, React.memo와 컴포넌트 렌더링 최적화, useCallback과 함수 재생성 방지 (0) | 2025.02.05 |
| React.js - 카운터 앱, State Lifting (0) | 2025.01.30 |
| React.js - State로 사용자 입력 관리하기 2, useRef로 컴포넌트의 변수 생성하기, React Hooks (0) | 2025.01.27 |
| React.js - 이벤트 처리하기, State로 상태관리하기, State와 Props, State로 사용자 입력 관리하기 1 (0) | 2025.01.26 |