-
React - useReducerReact 2020. 9. 11. 14:33
이전에는 useState로 상태 업데이트 해줬음
useReducer로도 할 수 있음
useState는 setValue(5); 와 설정하고 싶은 다음 상태를 직접 지정해줘서 업데이트함
useReducer는 action이라는 객체를 기반으로 상태를 업데이트 - action객체는 업데이트 할 때 참조하는 객체
type을 통해 지정하거나, 업데이트할 때 필요한 참조할 다른 객체 추가할 수 있음
-> useReduce - 상태 업데이트 로직을 컴포넌트에서 분리시킬 수 있음
reducer - 상태를 업데이트 하는 함수
이렇게 생김 -> action 객체를 함수로 받아와서 그 상태를 반환
useReducer 사용법
파라미터로 reducer함수와 기본값 넣어줌
number 는 현재 상태
dispatch 는 action을 발생시키는 함수
코드 작성
- Counter.js -
reducer 함수 만들고
// state에는 문자, 숫자, 함수 뭐든 쓸 수 있음 // action은 type에 따라 다른 상태 반환하도록 function reducer(state, action) { switch (action.type){ case 'INCREAMENT': return state + 1; case 'DECREAMENT': return state - 1; default: throw new Error('Unhandled action'); } }
함수 사용
function Counter(){ const [number, dispatch] = useReducer(reducer, 0); const onIncrease = () => { // setNumber(prevNumber => prevNumber + 1); dispatch({ type: 'INCREAMENT' }); } const onDecrease = () => { // setNumber(number - 1); dispatch({ type: 'DECREAMENT' }); } return (
index.js 에서 Counter 컴포넌트 넣어서 확인
잘 실행된다. 이전 코드
import React, { useState } from 'react'; function Counter(){ // number 라는 상태를 만들 것인데, // 기본값을 0으로 하겠다는 것 // setNumber는 기존값을 변경하는 값 const [number, setNumber] = useState(0); const onIncrease = () => { setNumber(prevNumber => prevNumber + 1); } const onDecrease = () => { setNumber(number - 1); } return ( <div> <h1>{number}</h1> <button onClick={onIncrease}>+1</button> <button onClick={onDecrease}>-1</button> </div> ); } export default Counter;
'React' 카테고리의 다른 글
React - 커스텀 hook 만들기 (0) 2020.09.13 React - App 컴포넌트에서 useReducer사용 (0) 2020.09.11 React - 컴포넌트 리렌더링 방지(React.memo) (0) 2020.09.11 React - 함수 재사용(useCallback) (0) 2020.09.11 React - 연산한 값 재사용(useMemo) (0) 2020.09.11