QueryCache
cacheを管理するclass
code:ts
interface QueryHashMap {
}
export class QueryCache extends Subscribable<QueryCacheListener> {
config: QueryCacheConfig
private queries: Query<any, any, any, any>[]
private queriesMap: QueryHashMap
...
QueryHashMapを見れば構造がわかる
key/value
valueはQuery
build()を呼ぶと、Queryを生成できる
code:ts
build<TQueryFnData, TError, TData, TQueryKey extends QueryKey>(
client: QueryClient,
options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>,
state?: QueryState<TData, TError>
): Query<TQueryFnData, TError, TData, TQueryKey> {
const queryKey = options.queryKey!
const queryHash =
options.queryHash ?? hashQueryKeyByOptions(queryKey, options)
let query = this.get<TQueryFnData, TError, TData, TQueryKey>(queryHash)
if (!query) {
query = new Query({
cache: this,
queryKey,
queryHash,
options: client.defaultQueryOptions(options),
state,
defaultOptions: client.getQueryDefaults(queryKey),
meta: options.meta,
})
this.add(query)
}
return query
}
keyからcache内を探して、なければqueryを新しく作っている
new Queryをしているのはproject全体でココのみ。
これが唯一のQueryの生成される場所