프로젝트 소개

Reselect는 메모이제이션된 "selector" 함수를 생성하기 위한 라이브러리입니다. 주로 Redux와 함께 사용되지만, 일반 JavaScript 불변 데이터와도 사용할 수 있습니다. README에 설명된 주요 특징: - Selector는 파생 데이터를 계산할 수 있으므로 Redux가 최소한의 상태만 저장할 수 있게 합니다. - Selector는 효율적입니다. 인수 중 하나가 변경되지 않으면 selector는 다시 계산되지 않습니다. - Selector는 구성 가능합니다. 다른 selector의 입력으로 사용될 수 있습니다. 프로젝트는 목적, 동기, 일반적인 사용 패턴(React-Redux 사용 포함)에 대한 배경 정보로 Redux 문서의 'selectors로 데이터 파생하기' 페이지를 안내합니다. 설치 옵션: - Redux Toolkit: 공식 Redux Toolkit 패키지에 Reselect가 기본적으로 포함되어 있으므로 추가 설치가 필요 없습니다. `@reduxjs/toolkit`에서 `createSelector`로 가져올 수 있습니다. - 독립형: npm, Yarn 또는 pnpm을 통해 `reselect` 패키지를 설치합니다. 문서는 reselect.js.org에서 호스팅되며 소개, Reselect 작동 방식 설명, `createSelector`, `createSelectorCreator`, `createStructuredSelector`, 개발 전용 검사, `lruMemoize`, `weakMapMemoize`에 대한 API 참조 및 FAQ를 포함합니다. 기본 사용법: `createSelector`는 인수에서 값을 추출하는 하나 이상의 입력 selector와 추출된 값을 받아 파생 값을 반환하는 결과 함수를 받습니다. 생성된 출력 selector는 추출된 값이 변경될 때만 다시 계산됩니다. README에는 일반 selector는 호출할 때마다 실행되는 반면, 메모이제이션된 selector는 재계산을 건너뛰고 입력이 변경되지 않으면 기존 결과 참조를 반환하는 예제가 포함되어 있습니다. 이러한 참조 안정성은 참조 동등성 검사에 의존하여 UI 업데이트를 최적화하는 React-Redux 및 React 같은 라이브러리에 중요하다고 언급됩니다. README는 용어를 정의합니다: selector 함수, 입력 selector, 출력 selector, 결과 함수, 의존성. 버전 5.0.0 변경 사항은 다음과 같습니다: - 사용자 지정: `createSelectorCreator`에 대해 사용자 지정된 `memoize` 및 `argsMemoize` 함수와 해당 옵션을 포함하는 옵션 객체; `createSelector`는 `memoize`와 `argsMemoize`의 직접 사용자 지정을 지원합니다. - 메모이제이션: 새로운 기본 메모이제이션 함수 `weakMapMemoize`; 디버깅을 위해 출력 selector 필드에 `memoize`와 `argsMemoize`가 노출됩니다. - TypeScript: 4.7 미만 TypeScript 버전 지원 중단; 출력 selector 중첩에 대한 TypeScript 성능 개선, 중첩 한도가 약 8에서 약 30으로 증가하여 깊은 타입 인스턴스화 오류 감소. - API: 런타임 오류에 취약하여 `createStructuredSelector`의 두 번째 오버로드 제거. - 추가 기능: 출력 selector 필드의 `dependencyRecomputations` 및 `resetDependencyRecomputations`; 동일한 인수로 입력 selector를 두 번 실행하고 결과가 다르면 경고하는 개발 도구 `inputStabilityCheck`; 결과 함수가 자신의 입력을 반환하는지 확인하는 개발 도구 `identityFunctionCheck`. - 주요 변경 사항: `ParametricSelector` 및 `OutputParametricSelector` 타입 제거, 해당 기능은 `Selector` 및 `OutputSelector`에 통합됨. 이 프로젝트는 MIT 라이선스입니다. 원래 NuclearJS의 getter, re-frame의 구독, Redux 제안에서 영감을 받았습니다.