このプロジェクトについて

Reselectは、メモ化された「セレクタ」関数を作成するためのライブラリです。Reduxとよく一緒に使われますが、任意のプレーンなJavaScriptのイミュータブルデータでも使用できます。 READMEに記載されている主な特徴: - セレクタは派生データを計算できるため、Reduxは最小限の状態だけを保存できます。 - セレクタは効率的です。引数のいずれかが変更されない限り、セレクタは再計算されません。 - セレクタは合成可能です。他のセレクタへの入力として使用できます。 このプロジェクトは、目的、動機、典型的な使用パターン(React-Reduxでの使用を含む)の背景として、Reduxドキュメントの「セレクタでデータを導出する」ページを参照しています。 インストールオプション: - Redux Toolkit: 公式のRedux ToolkitパッケージにはReselectがデフォルトで含まれているため、追加のインストールは不要です。`@reduxjs/toolkit`から`createSelector`としてインポートできます。 - スタンドアロン: npm、Yarn、またはpnpmで`reselect`パッケージをインストールします。 ドキュメントはreselect.js.orgでホストされており、イントロダクション、Reselectの仕組みの説明、`createSelector`、`createSelectorCreator`、`createStructuredSelector`、開発時のみのチェック、`lruMemoize`、`weakMapMemoize`のAPIリファレンス、およびFAQが含まれています。 基本的な使い方: `createSelector`は、引数から値を抽出する1つ以上の入力セレクタと、抽出された値を受け取って派生値を返す結果関数を受け取ります。生成された出力セレクタは、抽出された値が変更された場合にのみ再計算されます。READMEには、プレーンなセレクタは呼び出しのたびに実行される一方、メモ化されたセレクタは入力が変更されていない場合に再計算をスキップして既存の結果参照を返すことを示す例が含まれています。この参照の安定性は、参照の等価性チェックに依存してUI更新を最適化するReact-ReduxやReactのようなライブラリにとって重要であると述べられています。 READMEでは、セレクタ関数、入力セレクタ、出力セレクタ、結果関数、依存関係という用語が定義されています。 バージョン5.0.0の変更点は次のとおりです: - カスタマイズ: カスタマイズされた`memoize`関数と`argsMemoize`関数およびそのオプションを備えた`createSelectorCreator`のオプションオブジェクト。`createSelector`は`memoize`と`argsMemoize`の直接カスタマイズをサポートします。 - メモ化: 新しいデフォルトのメモ化関数`weakMapMemoize`。デバッグ用に`memoize`と`argsMemoize`が出力セレクタのフィールドに公開されます。 - TypeScript: TypeScript 4.7未満のサポートは終了。出力セレクタのネストに関するTypeScriptのパフォーマンスが向上し、ネスト制限が約8から約30に増加し、深い型インスタンス化エラーが減少します。 - API: ランタイムエラーが発生しやすいため、`createStructuredSelector`の2番目のオーバーロードを削除。 - 追加機能: 出力セレクタのフィールドに`dependencyRecomputations`と`resetDependencyRecomputations`を追加。同じ引数で入力セレクタを2回実行し、結果が異なる場合に警告する開発ツール`inputStabilityCheck`。結果関数が自身の入力を返すかどうかをチェックする開発ツール`identityFunctionCheck`。 - 破壊的変更: `ParametricSelector`型と`OutputParametricSelector`型を削除し、その機能は`Selector`と`OutputSelector`に統合されました。 このプロジェクトはMITライセンスです。元々はNuclearJSのゲッター、re-frameのサブスクリプション、およびReduxの提案に触発されました。