Skip to main content

사전에 요구되는 개념들

"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나 타임스탬프와 같은 것들을 생성하는 것은 코드를 예측할 수 없게 하고 디버그, 테스트를 어렵게 합니다.

이런 규칙들 때문에 리덕스 리듀서의 다른 개념들을 익히기 전에 아래의 중요한 개념들을 익히는 것이 중요합니다.

리덕스 리듀서 기초

핵심 개념:

  • 상태와 상태의 형태 관점으로 생각하기
  • 상태 조각에 의한 업데이트 책임 위임(리듀서 구성)
  • 고차 리듀서
  • 초기 상태 리듀서 정의

읽어볼 것들

순수함수와 사이드이펙트

핵심 개념:

  • 사이드이펙트
  • 순수함수
  • 함수 결합의 관점으로 생각하기

읽어볼 것들:

불변데이터 관리

핵심 개념:

  • 가변성 vs 불변성
  • 객체와 배열을 쉽고 안전하게 업데이트하기
  • 가변적인 함수와 명령 피하기

읽어볼 것들:

데이터 정규화

핵심 개념:

  • 데이터베이스 구조와 구성
  • 관계/중첩 데이터를 분리 된 테이블로 쪼개기
  • 특정 항목에 대한 한가지 정의 저장하기
  • 아이디로 항목 호출하기
  • 조회 ID로 항목 ID가 입력된 개체를 사용하고 아이디의 배열로 순서 추적하기
  • 관계있는 항목 연결

읽어볼 것들: