State 로직을 Reducer로 작성하기
한 컴포넌트에서 State 업데이트가 여러 이벤트 핸들러로 분산되는 경우가 있습니다. 이 경우 컴포넌트를 관리하기 어려워집니다. 따라서, 문제 해결을 위해 State를 업데이트하는 모든 로직을 Reducer를 사용해 컴포넌트 외부의 단일 함수로 통합해 관리할 수 있습니다.
학습 내용
- Reducer 함수란 무엇인가
useState에서useReducer로 리팩토링 하는 방법- Reducer를 언제 사용할 수 있는지
- Reducer를 잘 작성하는 방법
Reducer를 사용하여 State 로직 통합하기
컴포넌트가 복잡해지면 컴포넌트의 State가 업데이트되는 다양한 경우를 한눈에 파악하기 어려워질 수 있습니다. 예를 들어, 아래의 TaskApp 컴포넌트는 State에 tasks 배열을 보유하고 있으며, 세 가지의 이벤트 핸들러를 사용하여 task를 추가, 제거 및 수정합니다.
import { useState } from 'react'; import AddTask from './AddTask.js'; import TaskList from './TaskList.js'; export default function TaskApp() { const [tasks, setTasks] = useState(initialTasks); function handleAddTask(text) { setTasks([...tasks, { id: nextId++, text: text, done: false }]); } function handleChangeTask(task) { setTasks(tasks.map(t => { if (t.id === task.id) { return task; } else { return t; } })); } function handleDeleteTask(taskId) { setTasks( tasks.filter(t => t.id !== taskId) )