function reducer(state, action) {
// 새로운 상태를 만드는 로직
// const nextState = ...
return nextState;
}
//액션의 타입
// 카운터에 1을 더하는 액션
{
type: 'INCREMENT'
}
// 카운터에 1을 빼는 액션
{
type: 'DECREMENT'
}
// input 값을 바꾸는 액션
{
type: 'CHANGE_INPUT',
key: 'email',
value: 'tester@react.com'
}
// 새 할 일을 등록하는 액션
{
type: 'ADD_TODO',
todo: {
id: 1,
text: 'useReducer 배우기',
done: false,
}
}
const [state, dispatch] = useReducer(reducer, initialState);
//useState 사용
import React, { useState } from 'react';
const Counter = () => {
const [number, setNumber] = useState(0);
const handleCounterUp = () => {
setNumber(number + 1);
};
const handleCounterDown = () => {
setNumber(number - 1);
};
return (
<div>
<h1>{number}</h1>
<button onClick={handleCounterUp}>+1</button>
<button onClick={handleCounterDown}>-1</button>
</div>
);
};
export default Counter;
//useReducer 사용
import React, { useReducer } from 'react';
const reducer = (state, action) => {
switch (action.type) {
case 'INCREMENT':
return state + 1;
case 'DECREMENT':
return state - 1;
default:
return state;
}
};
const Counter = () => {
const [number, dispatch] = useReducer(reducer, 0);
const handleCounterUp = () => {
dispatch({ type: 'INCREMENT' });
};
const handleCounterDown = () => {
dispatch({ type: 'DECREMENT' });
};
return (
<div>
<h1>{number}</h1>
<button onClick={handleCounterUp}>+1</button>
<button onClick={handleCounterDown}>-1</button>
</div>
);
};
export default Counter;