React 리액트
컴포넌트(5) 리액트 훅(react hook)사용 - useReducer
dev.mk
2023. 9. 7. 11:18
반응형
1. useReducer 훅이란?
- useReducer은 상태를 관리하고 업데이트하는 훅인 useState를 대체할 수 있는 함수이다.
- 한 컴포넌트 내에서 State를 업데이트하는 로직 부분을 그 컴포넌트로부터 분리시키는 것이 가능하여 코드의 최적화 할 수 있다.
기본형
const [state, dispatch] = useReducer(reducer, initialState);
state : 현재 상태
dispatch : action을 발생시키는 함수
reducer : state와 action를 받아 새로운 state를 반환하는 함수
initialState : 초기값
같은 로직을 각각 useState훅과 useReducer를 사용하여 비교해보는게 이해가 빠르다.
App.js
import CounterUseState from "./component/CounterUseState";
import CounterUseReducer from "./component/CounterUseReducer";
const App = () => {
return (
<div style={{ position: "absolute", top: "50%", left: "50%" }}>
<span>useState 사용하기</span>
<CounterUseState />
<br/>
<hr/>
<span>useReducer 사용하기</span>
<CounterUseReducer />
</div>
);
};
export default App
src/component/CounterUseState.js
import React, { useState } from "react";
function CounterUseState() {
const [number, setNumber] = useState(0);
//증가 함수 선언
const fnIncrease = () => {
setNumber((prevNumber) => prevNumber + 1);
};
//감소 한수 선언
const fnDecrease = () => {
setNumber((prevNumber) => prevNumber - 1);
};
return (
<div>
<h1>{number}</h1>
<button onClick={fnIncrease}>+1</button>
<button onClick={fnDecrease}>-1</button>
</div>
);
}
export default CounterUseState;
src/component/CounterUseReducer.js
import React, { useReducer } from "react";
function reducer(state, action) {
switch (action.type) {
case "INCREMENT":
return state + 1;
case "DECREMENT":
return state - 1;
default:
return state;
}
}
function CounterUseReducer() {
const [number, dispatch] = useReducer(reducer, 0);
//증가 함수 선언
const fnIncrease = () => {
dispatch({ type: "INCREMENT" });
};
//감소 함수 선언
const fnDecrease = () => {
dispatch({ type: "DECREMENT" });
};
return (
<div>
<h1>{number}</h1>
<button onClick={fnIncrease}>+1</button>
<button onClick={fnDecrease}>-1</button>
</div>
);
}
export default CounterUseReducer;
# 결과
useState와 useReducer의 결과와 작동로직은 똑같다.
다른점은 useReducer인 경우 reducer라는 action타입을 받아 분기처리하는 function을 만들고 dispatch로 액션을 발생시켰다.
useState vs useReducer
- 컴포넌트에서 관리하는 state의 수가 적다 => useState
- 컴포넌트에서 관리하는 state의 수가 많고 state를 변경하는 함수가 많다 => useReducer
출처
https://cocoon1787.tistory.com/800
반응형