useReducer 알아보기

2024. 8. 12. 18:37· Stack/React
목차
  1. useReducer 란?
  2. useReducer를 사용할때 알아야될 3가지
  3. useReducer의 구조
  4. 전체코드
반응형

useReducer 란?

useReducer는 useState와 동일하게 state값을 관리하는데 사용한다.

다만 useReducer는 여러개의 하위값을 포함하는 state를 관리할때 사용한다.

{
  username: 'Wonyoung',
  email: 'wonyoung@example.com',
  hobbies: ['reading', 'traveling', 'coding'],
  friends: [
    { name: 'Alice', age: 25 },
    { name: 'Bob', age: 30 }
  ],  
  notifications: [
    { id: 1, message: 'Welcome to the platform!', read: false },
    { id: 2, message: 'Your profile is complete.', read: true }
  ] 
};

useReducer를 사용할때 알아야될 3가지

  • Reducer
  • Dispatch
  • Action

각각의 역할을 다음과 같다.

⇒ Dispatch는 Reducer에 state의 값의 수정을 요청하는 역할을 한다.

⇒ Action은 Dispatch가 요청하는 값을 의미한다.

⇒ Reducer는 component의 State를 업데이트 시켜주는 역할을 한다.

전체적인 관점으로는 Dispatch가 Action 이라는 값을 담아 Reducer에 요청한다.

Reducer는 이를 바탕으로 State를 수정한다. 라고 보면 된다.

useReducer의 구조

const [state, dispatch] = useReducer(reducer, "state의 초기값");

useReducer는 다음과 같은 구조를 가지고 있다.

해당코드로 state 값을 수정하고 싶으면 오직 reducer 를 통해서만 state의 값을 수정할 수 있다.

이때 state를 수정하는 reducer 를 호출하고 싶으면 dispatch를 통해서 reducer 함수를 호출할 수 있다.

const reducer = (state , action) => {
	 switch (action.type) {
    case 'deposit':
      return state + action.payload;
    case 'withdraw':
      return state - action.payload;
    default:
      return state;
  }
}

reducer 함수의 인자는 두가지 값을 갖는데 첫번째는 기존 reducer의 state값, 두번째로는 action의 값을 받는데 action에는 type과 payload를 갖게 된다.

<button onClick={() => { dispatch({ 
	  type: 'deposit',
    payload: number,
   });
 }}>

위와 같이 button에는 dispatch의 인자로 객체를 받는데 객체의 값은 reducer 함수의 action값으로 전달된다.

객체의 주요한 값으론 첫번째가 type 이다. type에 따라 reducer가 다르게 동작할 수 있다 deposit 일경우 에는 state + action.payload 가 동작하게 되고 withdraw일 경우에는 state - action.payload 가 동작하게 된다.

두번째로는 payload 인데 이는 action 에서 전달해줄값을 포함하게 된다.

전체코드

'use client';

import { useReducer, useState } from 'react';

// reducer  - state를 업데이트 시키는 역할
// dispatch - state 업데이트를 요구하는 역할
// action   - 요구사항

interface Action {
  type: 'deposit' | 'withdraw'; // 가능한 action type들을 정의
  payload: number; // payload는 number 타입
}

const reducer = (state: number, action: Action) => {
  console.log('reducer 가 일하는 중');
  switch (action.type) {
    case 'deposit':
      return state + action.payload;
    case 'withdraw':
      return state - action.payload;
    default:
      return state;
  }
};

const UseReducerEx = () => {
  const [number, setNumber] = useState(0);
  const [money, dispatch] = useReducer(reducer, 0);

  return (
    <div>
      <h2>useReducer 사용예시</h2>
      <p> 잔고 : {money} 원</p>
      <input type="number" value={number} onChange={(e) => setNumber(Number(e.target.value))} step={1000} />
      <button
        onClick={() => {
          dispatch({
            type: 'deposit',
            payload: number,
          });
        }}
      >
        예금
      </button>
      <button
        onClick={() => {
          dispatch({
            type: 'withdraw',
            payload: number,
          });
        }}
      >
        출금
      </button>
    </div>
  );
};

export default UseReducerEx;

반응형

'Stack > React' 카테고리의 다른 글

useDefferdValue 알아보기  (0) 2024.08.16
useId 알아보기  (0) 2024.08.16
useLayoutEffect 에 대해 알아보기  (2) 2024.08.12
useCallback 이란?  (0) 2024.08.07
useMemo 알아보기  (5) 2024.08.07
  1. useReducer 란?
  2. useReducer를 사용할때 알아야될 3가지
  3. useReducer의 구조
  4. 전체코드
'Stack/React' 카테고리의 다른 글
  • useDefferdValue 알아보기
  • useId 알아보기
  • useLayoutEffect 에 대해 알아보기
  • useCallback 이란?
WHITE_FROST
WHITE_FROST
개발공부리뷰블로그
하얀하얀IT개발공부리뷰블로그
반응형
WHITE_FROST
하얀하얀IT
WHITE_FROST
전체
오늘
어제
  • 분류 전체보기 (117)
    • Stack (43)
      • Next.js (7)
      • React (12)
      • React-Native (15)
      • TypeScript (0)
      • Python (2)
      • JavaScript (2)
      • Android (1)
      • DB (2)
      • JAVA (1)
    • Obsidian (1)
    • AI (3)
    • AI Tools (0)
    • Tools (0)
    • Mac (0)
    • Error (7)
    • 알고리즘 (43)
    • 공부일상 (10)
    • 개발 도구 & 라이브러리 (0)
    • 정보처리기사 (0)
    • 기타 (7)
    • Tip (2)

공지사항

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
WHITE_FROST
useReducer 알아보기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.