Skip to content

Commit b5c4d14

Browse files
committed
improve stability of useInfiniteQuerySubscription's return value
1 parent 78833cb commit b5c4d14

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

packages/toolkit/src/query/react/buildHooks.ts

+15-3
Original file line numberDiff line numberDiff line change
@@ -2052,13 +2052,25 @@ export function buildHooks<Definitions extends EndpointDefinitions>({
20522052

20532053
usePromiseRefUnsubscribeOnUnmount(promiseRef)
20542054

2055+
const stableArg = useStableQueryArgs(
2056+
options.skip ? skipToken : arg,
2057+
// Even if the user provided a per-endpoint `serializeQueryArgs` with
2058+
// a consistent return value, _here_ we want to use the default behavior
2059+
// so we can tell if _anything_ actually changed. Otherwise, we can end up
2060+
// with a case where the query args did change but the serialization doesn't,
2061+
// and then we never try to initiate a refetch.
2062+
defaultSerializeQueryArgs,
2063+
context.endpointDefinitions[endpointName],
2064+
endpointName,
2065+
)
2066+
20552067
return useMemo(() => {
20562068
const fetchNextPage = () => {
2057-
return trigger(arg, 'forward')
2069+
return trigger(stableArg, 'forward')
20582070
}
20592071

20602072
const fetchPreviousPage = () => {
2061-
return trigger(arg, 'backward')
2073+
return trigger(stableArg, 'backward')
20622074
}
20632075

20642076
return {
@@ -2070,7 +2082,7 @@ export function buildHooks<Definitions extends EndpointDefinitions>({
20702082
fetchNextPage,
20712083
fetchPreviousPage,
20722084
}
2073-
}, [promiseRef, trigger, arg])
2085+
}, [promiseRef, trigger, stableArg])
20742086
}
20752087

20762088
const useInfiniteQueryState: UseInfiniteQueryState<any> =

0 commit comments

Comments
 (0)