問題タブ [apollo-cache-inmemory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
caching - Apollo Client v3 一定期間後にキャッシュ エントリを削除する
キャッシュされたアイテムを特定の期間 (たとえば 24 時間) 後に失効させる方法があるかどうか疑問に思っています。
私は Apollo Client v3 が や などのメソッドを提供していることを知っていますcache.evict
がcache.gc
、これは良いスタートであり、すでに使用しています。ただし、一定期間後にキャッシュ項目を削除する方法が必要です。
私が現在行っていることは、TimeToLive フィールドを Apollo スキーマのすべてのオブジェクトに追加することです。バックエンドがオブジェクトを返すと、フィールドには現在の時刻 + 24 時間 (つまり、24 時間の時刻) が入力されます。次に、フロント エンドでデータをクエリするときに、返されたデータの TimeToLive フィールドが将来のものかどうかを確認します (そうでない場合は、データが確実にキャッシュから取得されたことを意味し、その場合、refetch
関数を呼び出します。これにより、クエリはサーバーからデータを取得するように強制されます.ただし、主に、返されたデータのすべての結果を反復処理する必要があるため、これは最善の方法とは思えません.返されたオブジェクトのいずれかが期限切れかどうかをチェックします. ; もしそうなら、すべてが再取得されます。
私が考えたもう 1 つの解決策は、React Native Queueのようなものを使用し、期限切れになったキャッシュと削除されたアイテムを定期的にチェックするバックグラウンド タスクを用意することでした。しかし、繰り返しになりますが、私はこのソリューションに完全に納得しているわけではありません。
ここで少し説明します。私は料理 / レシピ アプリを作成しています。レシピ / 投稿はデバイスにキャッシュされます。ただし、私の懸念は、ユーザーが投稿を削除できることですが、その投稿をキャッシュしている他のすべての人は引き続きそれを見ることができるため、キャッシュされたアイテムを期限切れにすることで、少なくとも数時間しか見ることができなくなります削除する前に。ただし、これをすべて一緒に行うには、より良い方法かもしれません。つまり、キャッシュされたアイテムをサーバーにクライアントに接続させることです (ただし、これを書いている時点では、低リフトのソリューションは考えられませんでした)。
apollo-client - ROOT_QUERY オブジェクトでフィールド reportModuleById が見つかりません
次のクエリがあります。
ある時点で、レポート モジュールをキャッシュに書き込みます。
その後、次を使用してキャッシュから読み戻そうとしますreadQuery
。
私はアプリケーション全体で同じ方法を使用writeQuery
しreadQuery
ています。しかし今回は、「ROOT_QUERY オブジェクトにフィールド reportModuleById が見つかりません」というエラーが表示されます。
奇妙な部分は、データが実際にキャッシュにあることです。
私は何日もこれに頭を悩ませようとしていますが、ここで見逃しているものはありますか?