Skip to content

Latest commit

 

History

History
80 lines (63 loc) · 1.71 KB

useReducer.md

File metadata and controls

80 lines (63 loc) · 1.71 KB

useReducer

useReducer는 state가 많고 state 변경하는 함수가 복잡할 때 사용한다

예를 들어

import React, {useState} from 'react';

export default function Index() {

    const [count, setCount] = useState(0);

    function plus() {
        setCount(count + 1);
    }

    function minus() {
        setCount(count - 1);
    }

    return (
        <div>
            <button onClick={plus}>+</button>
            <button onClick={minus}>-</button>
            <div>{count}</div>
        </div>
    );
}

이 코드에 있는 plus 함수라든가 minus 라든가 onchange 같은 state를 변경하는 함수들을 useReducer를 사용해 하나로 합쳐 보겠다.

// Index.js
import React, { useReducer } from "react";
import { stateInitional, indexReducer } from "./IndexReducer";

export default function Index() {
  const [state, dispatch] = useReducer(indexReducer, stateInitional);

  return (
    <div>
      <button onClick={() => {dispatch({type: 'plus'})}}>+</button>
      <button onClick={() => {dispatch({type: 'minus'})}}>-</button>
      <div>{state.count}</div>
    </div>
  );
}

Index.js에서는 IndexReducer라는 파일을 불러와서 useReducer에 넣어주고 state와 dispatch로 받아서 사용한다

//IndexReducer.js
export const stateInitional = {
  count: 0
};

export const indexReducer = (state, action) => {
  switch (action.type) {
    case "plus": {
      return {
        ...state,
        count: state.count + 1
      };
    }
    case "minus": {
      return {
        ...state,
        count: state.count - 1
      };
    }
  }
};

IndexReducer.js에서는 useState 대신 stateInitional을
여러 함수 대신 indexReducer에서 switch로 처리한다