useReducer init

초기 상태 계산은 init 함수로 한 번만 분리한다

Todo 목록처럼 로컬 스토리지에서 복원해야 하는 상태는 렌더마다 읽지 않고 세 번째 인자인 init에서 시작값을 만들 수 있습니다.

처음 렌더링될 때

init(initialTodos)

저장된 todos 파싱

localStorage 값이 있으면 JSON으로 복원하고, 실패하면 빈 배열로 시작합니다.

useReducer

[todos, dispatch] 생성

컴포넌트는 상태 목록과 액션을 보내는 dispatch만 받아 렌더링합니다.

사용자가 할 일을 바꿀 때

ADD_TODO

새 항목 추가

reducer가 기존 배열을 복사하고 새 id와 text를 가진 객체를 붙입니다.

TOGGLE_TODO

완료 상태 반전

선택된 id만 새 객체로 바꾸고 나머지 todo는 그대로 유지합니다.

dispatchreducernew stateuseEffect 저장