[react] JSX에서 useReducer 훅 사용하기
React 애플리케이션을 개발하다 보면 상태 관리가 중요하게 작용합니다. useState
훅은 간단한 상태 관리에 적합하지만, 복잡한 상태 관리에는 제한적일 수 있습니다. 이런 경우에 useReducer
훅을 사용하여 더 유연하게 상태를 관리할 수 있습니다.
useReducer
훅을 사용하면 상태 변경을 위한 액션을 정의하고 이를 디스패치(dispatch)하여 상태를 관리할 수 있습니다. 이를 JSX에서 구현하는 방법을 알아보겠습니다.
1. 초기 상태 및 액션 정의하기
먼저, useReducer
훅을 사용하기 위해 초기 상태와 액션을 정의합니다.
const initialState = { count: 0 };
const actionTypes = {
increment: "INCREMENT",
decrement: "DECREMENT"
};
위의 코드에서는 initialState
에 초기 상태를 정의하고, actionTypes
에는 액션의 종류를 문자열 상수로 정의했습니다.
2. 리듀서 함수 작성하기
다음으로, 상태 및 액션을 처리할 리듀서 함수를 작성합니다.
function reducer(state, action) {
switch (action.type) {
case actionTypes.increment:
return { count: state.count + 1 };
case actionTypes.decrement:
return { count: state.count - 1 };
default:
throw new Error();
}
}
위의 코드에서 reducer
함수는 현재 상태와 액션을 받아서 switch 문을 통해 각 액션에 따른 새로운 상태를 반환합니다.
3. JSX에서 useReducer 훅 사용하기
이제 useReducer
훅을 사용하여 JSX에서 상태 및 디스패치를 정의할 수 있습니다.
import React, { useReducer } from 'react';
function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<div>
<p>Count: {state.count}</p>
<button onClick={() => dispatch({ type: actionTypes.increment })}>Increment</button>
<button onClick={() => dispatch({ type: actionTypes.decrement })}>Decrement</button>
</div>
);
}
위의 코드에서 useReducer
훅을 사용하여 리듀서 함수와 초기 상태를 전달받고, 이를 통해 상태 및 디스패치를 사용하여 JSX에 반영했습니다.
useReducer
훅을 사용함으로써, 더 복잡한 상태 관리를 하는 React 애플리케이션을 개발할 때 유용하게 활용할 수 있습니다.