From 13d79271a6046d6d6642767117df722bf3359f98 Mon Sep 17 00:00:00 2001 From: Ross Martin <2498502+rossmartin@users.noreply.github.com> Date: Wed, 18 Jun 2025 15:44:42 -0500 Subject: [PATCH] Add refetchCachedPages option for infinite query --- packages/toolkit/src/query/core/apiState.ts | 7 +++++ .../toolkit/src/query/core/buildThunks.ts | 29 ++++++++++--------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/packages/toolkit/src/query/core/apiState.ts b/packages/toolkit/src/query/core/apiState.ts index 7e1c1420e0..b20bb0094a 100644 --- a/packages/toolkit/src/query/core/apiState.ts +++ b/packages/toolkit/src/query/core/apiState.ts @@ -58,6 +58,13 @@ export type InfiniteQueryConfigOptions = { * direction will be dropped from the cache. */ maxPages?: number + /** + * Defaults to `true`. When this is `true` and an infinite query endpoint is refetched + * (due to tag invalidation, polling, arg change configuration, or manual refetching), + * RTK Query will try to sequentially refetch all pages currently in the cache. + * When `false` only the first page will be refetched. + */ + refetchCachedPages?: boolean } export type InfiniteData = { diff --git a/packages/toolkit/src/query/core/buildThunks.ts b/packages/toolkit/src/query/core/buildThunks.ts index 048c98b9f3..6d3f412649 100644 --- a/packages/toolkit/src/query/core/buildThunks.ts +++ b/packages/toolkit/src/query/core/buildThunks.ts @@ -671,7 +671,8 @@ export function buildThunks< const { infiniteQueryOptions } = endpointDefinition // Runtime checks should guarantee this is a positive number if provided - const { maxPages = Infinity } = infiniteQueryOptions + const { maxPages = Infinity, refetchCachedPages = true } = + infiniteQueryOptions let result: QueryReturnValue @@ -730,18 +731,20 @@ export function buildThunks< } as QueryReturnValue } - // Fetch remaining pages - for (let i = 1; i < totalPages; i++) { - const param = getNextPageParam( - infiniteQueryOptions, - result.data as InfiniteData, - arg.originalArgs, - ) - result = await fetchPage( - result.data as InfiniteData, - param, - maxPages, - ) + if (refetchCachedPages) { + // Fetch remaining pages + for (let i = 1; i < totalPages; i++) { + const param = getNextPageParam( + infiniteQueryOptions, + result.data as InfiniteData, + arg.originalArgs, + ) + result = await fetchPage( + result.data as InfiniteData, + param, + maxPages, + ) + } } }