이 페이지는 PageTurner AI로 번역되었습니다(베타). 프로젝트 공식 승인을 받지 않았습니다. 오류를 발견하셨나요? 문제 신고 →
리듀서 필수 선행 개념
"Redux Fundamentals" Part 3: State, Actions, and Reducers에서 설명한 것처럼, Redux 리듀서 함수는 다음과 같습니다:
-
(previousState, action) => newState시그니처를 가져야 하며, 이는Array.prototype.reduce(reducer, ?initialValue)에 전달하는 함수 유형과 유사합니다. -
"순수(pure)"해야 합니다. 즉 리듀서는:
- 사이드 이펙트를 수행하지 않음(예: API 호출 또는 비-로컬 객체/변수 수정)
- 비순수 함수를 호출하지 않음(예:
Date.now또는Math.random) - 인수를 변형(mutate)하지 않음. 상태 업데이트 시 기존 상태 객체를 직접 수정하지 않고, 필요한 변경 사항을 포함한 새로운 객체를 생성해야 합니다. 상태 내 하위 객체 업데이트 시에도 동일한 접근 방식을 적용합니다.
불변성, 사이드 이펙트, 변형에 대한 참고 사항
변형(mutation)은 시간 여행 디버깅과 React Redux의
connect기능을 방해하므로 권장되지 않습니다:
- 시간 여행의 경우, Redux DevTools는 기록된 액션 재생 시 상태 값만 출력되고 다른 것은 변경되지 않을 것으로 기대합니다. 변형이나 비동기 동작 같은 사이드 이펙트는 단계 간 동작 변경을 유발해 애플리케이션을 손상시킵니다.
- React Redux의 경우,
connect는 컴포넌트 업데이트 여부를 판단하기 위해mapStateToProps함수가 반환한 props의 변경을 확인합니다. 성능 향상을 위해connect는 상태의 불변성에 의존하는 단축 경로를 사용하며, 얕은 참조 비교로 변경 사항을 감지합니다. 이는 객체/배열에 직접 변형을 가한 변경 사항은 감지되지 않아 컴포넌트가 재렌더링되지 않음을 의미합니다.리듀서 내 고유 ID/타임스탬프 생성 같은 기타 사이드 이펙트도 코드를 예측 불가능하게 만들어 디버깅과 테스트를 어렵게 합니다.
이러한 규칙들로 인해, Redux 리듀서 구성 기법을 더 살펴보기 전에 다음 핵심 개념들을 완전히 이해하는 것이 중요합니다:
Redux 리듀서 기초
핵심 개념:
-
상태(state)와 상태 구조(state shape) 측면에서 사고하기
-
상태 조각별 업데이트 책임 위임(리듀서 구성)
-
고차 리듀서(Higher order reducers)
-
리듀서 초기 상태 정의
추천 자료:
순수 함수와 사이드 이펙트
핵심 개념:
-
사이드 이펙트
-
순수 함수
-
함수 조합 측면에서 사고하기
추천 자료:
불변 데이터 관리
핵심 개념:
-
가변성 vs 불변성
-
객체와 배열을 안전하게 불변적으로 업데이트하기
-
상태를 변이하는 함수와 구문 피하기
추천 자료:
데이터 정규화
핵심 개념:
-
데이터베이스 구조와 조직화
-
관계형/중첩 데이터를 별도 테이블로 분리하기
-
단일 항목에 대한 정의 저장하기
-
ID로 항목 참조하기
-
항목 ID를 키로 한 객체를 조회 테이블로 사용하고, 순서 추적을 위해 ID 배열 활용하기
-
관계에서 항목 연결하기
추천 자료: