const [state, dispatch] = useReducer(reducer/* 함수 */, initialArg/* 초기값 */, init);
// (state, action) => newState의 형태로 reducer를 받음
Context API
나 Redux
와 함께 많이 쓰임useState()
의 대체 함수dispatch()
는 객체를 받음useState()
는 state를 변경하는 set 함수를 반환하고,useReducer()
는 state를 변경하게 하는 dispatch를 반환import useReducer
import React, { useReducer } from "react";
새로운 useReducer
변수를 선언
export default function Counter() {
/* 이 부분 */
const [state, dispatch] = useReducer(reducer, initialState);
return (
<></>
);
}
reducer
함수와 initialState
설정
const initialState = {count: 0};
function reducer(state, action) {
switch (action.type) {
case 'increment':
return {count: state.count + 1};
case 'decrement':
return {count: state.count - 1};
default:
break;
}
}
dispatch 값 전달 트리거 작성
const initialState = {count: 0};
function reducer(state, action) {
switch (action.type) {
case 'increment':
return {count: state.count + 1};
case 'decrement':
return {count: state.count - 1};
default:
break;
}
}
export default function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<>
Count: {state.count}
/* 이 부분 */
<button onClick={() => dispatch({type: 'decrement'})}>-</button>
<button onClick={() => dispatch({type: 'increment'})}>+</button>
</>
);
}