Redux Toolkit と RTK Query を使用してプロジェクトを構築し、API からいくつかのエントリを取得しようとしています。 createEntityAdapter のデータの正規化メソッドを使用しています。特定のコンポーネントではデータを配列として必要とするため、最終的にセレクターを使用することになりました。ここで私の問題は、フィルターをクエリのパラメーターとして追加したため、セレクターが機能しなくなったことです。
「パラメーターを指定して RTK クエリ セレクターを使用する方法は?」などの同様の質問をここで調べましたが、私は愚かすぎて何を変更すればよいのか理解できませんでした。 RTK クエリのドキュメントを理解しようとしていますが、理解できません。上記の質問から、何を選択するかを正確に知るためにセレクターにもパラメーターが必要であること、およびこれが推奨されるパターンではないことはわかっていますが、それを機能させる方法が理解できません。
私のエントリースライス:
リーリー
これを Entries コンポーネントで次のように使用しますリーリー
注: get クエリから「フィルター」を削除すると、すべてが以前と同じように機能します (もちろん、予想どおり)。免責事項: 一体何をしているのか全く分かりません。ドキュメントを読んで理解しようとしているところですので、フィードバックをいただければ幸いです。 ありがとう!
P粉7795658552023-12-29 00:13:52
はい、これはややデリケートなトピックです。RTKQ のドキュメントでは最も単純な例、つまりパラメーターをまったく使用しないクエリが示される傾向があるためです。私自身もたくさんの問題を抱えてきました。
とにかく、selectEntryResult
を 2 つのパラメーター (state と params) を持つ関数として宣言しました。次に、その下にアダプター セレクターを作成するときに、state という 1 つのパラメーターのみを使用してそれを呼び出します。また、コンポーネント内で次のように最後のセレクターを使用する場合:
パラメータはどこにも見つかりません。デフォルトでは 未定義です
し、そのようなクエリ パラメータに関連付けられたデータも見つかりません。
ここで理解すべき重要なことは、実際には何らかの方法でセレクターの各レベル (各ラッパー) にクエリ パラメーターを渡す必要があるということです。
ここでの 1 つの方法は、セレクターを通じてパラメーターを「転送」することです:
リーリーここでは、RTK からエクスポートされた createSelector
関数を使用します。次に、コンポーネントで次のようなことを行います:
これは、エンティティ アダプターによって作成された selectAll
セレクターを使用する場合は機能しますが、selectById
を使用する場合、そのセレクターもパラメーター化されているため、問題が発生します。つまり、selectById
セレクターは、取得するエンティティ ID の 2 番目の引数を取るように内部で定義されていますが、私が示したメソッドでは 2 番目の引数を使用してクエリ パラメーター ( のフィルター フィルター) を渡します。場合)。
私の知る限り、完璧に機能し、次のすべてをカバーするソリューションはこれまでのところありません。
私はかつて、あらゆる状況で使用できるこのようなラッパーを作成したことがあります。残念ながらプライベート パッケージなので共有できませんが、基本的な考え方は、
selectById と
selectAll (および他のすべてのセレクター) の両方が正しく動作するようにパラメーターを変更することです。クエリ パラメーターを 3 番目のパラメーターとしてセレクターに渡し、各エンティティ アダプター セレクターをさらにラップします:
リーリー
途中で見つけた役立つ記事は