Skip to content

Commit d5074df

Browse files
committed
Code comments
1 parent 73209e0 commit d5074df

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

frontends/api/src/ssr/prefetch.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ export const prefetch = async (queries: (Query | unknown)[]) => {
1818
.getQueriesData([])
1919
.map((item) => JSON.stringify(item[0]))
2020

21+
/* Set the prefetched keys so we can check them after first
22+
* render to make sure we are not prefetching anything unnecessarily */
2123
queryClient.setQueryData(["prefetchedKeys"], prefetchedKeys)
2224

2325
return dehydrate(queryClient)

frontends/api/src/ssr/useQuery.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@ export const useQuery = <
2525
): UseQueryResult<TData, TError> => {
2626
const queryClient = useQueryClient()
2727

28-
const cached = queryClient.getQueryState(options.queryKey!)
29-
28+
/* This flag is set to true when we get the window load event */
3029
const initialLoaded = queryClient.getQueryData(["initialRenderComplete"])
3130

31+
/* Check if the item is in the cache (implying prefetched, until initialLoaded) */
32+
const cached = queryClient.getQueryState(options.queryKey!)
33+
3234
if (!initialLoaded) {
3335
if (!cached) {
3436
console.warn(
@@ -42,6 +44,7 @@ export const useQuery = <
4244

4345
const key = JSON.stringify(options.queryKey)
4446
if (!initialQueries.includes(key)) {
47+
/* Track the queries made during initial render so we can compare to the prefetched list */
4548
queryClient.setQueryData(["initialKeys"], [...initialQueries, key])
4649
}
4750
}

frontends/api/src/ssr/useQueryCacheWarning.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,23 @@ export const useQueryCacheWarning = (queryClient: QueryClient) => {
77
queryClient.setQueryData(["initialRenderComplete"], true)
88
window.removeEventListener("load", onLoad)
99

10+
/* These are the known keys set while prefetching on the server before dehydrating (serializing) for the client */
1011
const prefetchedKeys = queryClient.getQueryData<string[]>([
1112
"prefetchedKeys",
1213
])
1314

15+
/* These are the cache entries we set ourselves that are not queries, so we ignore below */
1416
const nonQueryKeys = new Set([
1517
'["prefetchedKeys"]',
1618
'["initialRenderComplete"]',
1719
])
1820

21+
/* These are set as the components request useQuery() during initial render */
1922
const initialKeys = new Set(
2023
queryClient.getQueryData<string[]>(["initialKeys"]),
2124
)
2225

26+
/* We can find the keys prefetched but not used by any component during initial render */
2327
const superfluousKeys = prefetchedKeys?.filter(
2428
(key) => !nonQueryKeys.has(key) && !initialKeys.has(key),
2529
)

0 commit comments

Comments
 (0)