useReducer

송승찬·2020년 10월 2일
0

TIL

목록 보기
41/52
post-custom-banner

useReducer

  • useState의 대체 함수로, 하나의 컴포넌트에서 여러 개의 state를 다룰 때 사용
  • (state, action) => newState의 형태로 reducer를 받고 dispatch 메서드와 짝의 형태로 현재 state를 반환
    initalState에 넣어준 값 === state의 초기값, dispatch() = reducer(_,action)
  • dispatch()는 상태값 변경 함수와 마찬가지로 변하지 않는 값이기에 useEffect(effect)의 의존성 배열에 입력해줄 필요가 없기에 의존성 배열의 사용을 줄이고 싶을 때 useReducer의 사용이 적절

    React는 dispatch 함수의 동일성이 안정적이고 리렌더링 시에도 변경되지 않으리라는 것을 보장합니다. 이것이 useEffect나 useCallback 의존성 목록에 이 함수를 포함하지 않아도 괜찮은 이유입니다.
import React,{useState,useEffect,useReducer} from 'react';

export default function App () {
    return (
        <Counter />
    )
}

//주어진 시간을 시/분/초로 환산 후 1초씩 남은 시간이 줄어드는 타이머
const initialState = {count: 100};

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return {count: state.count + 1};
    case 'decrement':
      return {count: state.count - 1};
    default:
      throw new Error();
  }
}

function Counter() {
  const [state, dispatch] = useReducer(reducer, initialState);
  return (
    <>
      Count: {state.count}
      <button onClick={() => dispatch({type: 'decrement'})}>-</button>
      <button onClick={() => dispatch({type: 'increment'})}>+</button>
    </>
  );
}

참고 : https://ko.reactjs.org/docs/hooks-reference.html#usecontext

profile
superfly
post-custom-banner

0개의 댓글