사전에 요구되는 개념들
"Redux 기초" Part 3: State, Actions, and Reducers에서 설명한 것처럼 리덕스의 리듀서는 함수입니다:
(previousState, action) => newState의 꼴로 작성되어야 합니다.Array.prototype.reduce(reducer, ?initialValue)에 전달되는 함수 타입과 비슷합니다.- "순수"해야 합니다. 리듀서에서 이것의 의미는:
- 사이드이펙트(API를 호출하거나 지역객체, 지역변수가 아닌 것을 수정하는 등)가 생기면 안됩니다.
- 순수하지 않은 함수(Date.now 혹은 Math.random와 같은)를 호출하면 안됩니다.
- 인수를 변경하면 안 됩니다. 리듀서가 상태를 변화시킬 때 이미 존재하는 상태 객체를 수정하면 안됩니다. 그 대신 변화에 필요한 새로운 객체를 만들어야 합니다. 리듀서가 업데이트하는 상태 내의 모든 객체에 동일한 접근이 필요합니다.
불변성, 사이드이펙트, 변화에 대한 주의
변경은 시간 단위 디버깅과 리덕스의
connect함수를 방해하기 때문에 권장되지 않습니다:
- 시간 단위로 디버깅할때 리덕스 DevTools는 기록 된 액션들에게 상태 값만 만드는 것을 기대합니다. 변화나 비동기액션같은 사이드이펙트는 시간단위 디버깅에서 각 단계 간의 동작을 변화시켜 애플리케이션을 중단시킵니다.
- 리액트 리덕스에서
connect는 컴포넌트가 업데이트되어야 하는지 확인하기 위해mapStateToProps함수로 부터 반환된 props를 확인합니다. 성능의 향상을 위해서connect는 불변성에 기인한 더 쉬운 방법을 취하며 객체가 동일한지 확인하기 위해 얕은 참조 검사를 사용합니다. 즉, 직접 객체를 변화시킨 것은 감지하지 못하며, 다시 렌더링 되지 않습니다.그 외 리듀서에서 유니크한 ID나 타임스탬프와 같은 것들을 생성하는 것은 코드를 예측할 수 없게 하고 디버그, 테스트를 어렵게 합니다.
이런 규칙들 때문에 리덕스 리듀서의 다른 개념들을 익히기 전에 아래의 중요한 개념들을 익히는 것이 중요합니다.
리덕스 리듀서 기초
핵심 개념:
- 상태와 상태의 형태 관점으로 생각하기
- 상태 조각에 의한 업데이트 책임 위임(리듀서 구성)
- 고차 리듀서
- 초기 상태 리듀서 정의
읽어볼 것들
- "Redux 기초" Part 3: State, Actions, and Reducers
- 리덕스 도큐먼트: 보일러플레이트 줄이기
- 리덕스 도큐먼트: 실행취소 구현하기
- 리덕스 도큐먼트:
combineReducers - 고차 리듀서의 힘
- 스택 오버플로우: 초기 상태 저장과
combineReducers - 스택 오버플로우: 상태 키 이름과
combineReducers
순수함수와 사이드이펙트
핵심 개념:
- 사이드이펙트
- 순수함수
- 함수 결합의 관점으로 생각하기
읽어볼 것들:
불변데이터 관리
핵심 개념:
- 가변성 vs 불변성
- 객체와 배열을 쉽고 안전하게 업데이트하기
- 가변적인 함수와 명령 피하기
읽어볼 것들:
데이터 정규화
핵심 개념:
- 데이터베이스 구조와 구성
- 관계/중첩 데이터를 분리 된 테이블로 쪼개기
- 특정 항목에 대한 한가지 정의 저장하기
- 아이디로 항목 호출하기
- 조회 ID로 항목 ID가 입력된 개체를 사용하고 아이디의 배열로 순서 추적하기
- 관계있는 항목 연결
읽어볼 것들: