React
React - useReducer
Starters
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;