React

[React #30] useReducer

PEAZH 2024. 3. 18. 10:09
반응형

🌵 useReducer()란?

의미

컴포넌트 내부에 새로운 state를 생성하는 React Hook으로,

모든 useState는 useReducer로 대체 가능함

useState와 차이 : 상태 관리 코드를 외부로 분리할 수 있음

state와 reducer 예시

useState는 상태를 관리하는 코드를 컴포넌트 내부에서 사용해서 UI를 렌더링 하는 코드보다 state를 관리하는 코드들이 더 복잡하고 길어지게 되면서 가독성이 떨어지고 유지보수가 힘들어짐

상태 코드들이 복잡할 때 이 코드들을 외부의 별도 함수로 분리할 수 있는 useReducer를 사용


🌵 useReducer 기본 형태

기본

import { useReducer } from 'react';

function Exam() {
  const [state, dispatch] = useReducer(reducer,0);
}

export default Exam;
  • useReducer는 state를 생성해서 배열의 첫 번째 요소인 state를 반환해 줌
  • useReducer의 첫 번째 인수 reducer는 상태를 실제로 변화시킬 함수, 두 번째 인수는 초기값을 설정할 수 있음
  • state는 현재의 값, dispatch는 상태 변화를 요청하는 함수

dispatch() 상태 변화 요청할 때

dispatch({ 
    type: 'INCREASE',
    data: 1,
});
  • 인수로는 상태가 어떻게 변화되길 원하는지 정보를 전달해야 함
  • 객체 형태로 전달해야 하는데, 이 객체를 Action 객체라고 부름
  • 보통 type은 상태를 어떻게 변화시킬지, data는 얼마를 전달할지 명시해 줌
  • 1만큼 증가시켜 달라는 의미

reducer() 함수 생성

function reducer(state, action) {}
  • 매개 변수로 현재의 state 값을 제공하고, 두 번째 인수는 Action 객체를 제공함
  • 이 두 개의 값을 이용해서 새로운 state의 값을 반환하면 됨

정리

 

📌Reducer() 함수의 호출 순서

 

dispatch 함수 호출하면서 action 객체 전달 → reducer 함수가 실행되면서 state를 변경  → 반환된 값을 useReducer가 불러와서 실제로 state의 값을 변경

 

🌵 useReducer 예시 코드

Exam.jsx

import { useReducer } from 'react';

function reducer(state, action) {
  switch (action.type) {
    case 'INCREASE':
      return state + action.data;
    case 'DECREASE':
      return state - action.data;
    default:
      return state;
  }
}

function Exam() {
  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;

 

실행화면

 

 

참고자료

이정환 Winterlood, '한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지'
반응형