Skip to content

Commit a3d23fb

Browse files
committed
feat(QueryCache): change logic, changed option to neverRefetchOnMount
1 parent 2e74b9c commit a3d23fb

File tree

4 files changed

+15
-11
lines changed

4 files changed

+15
-11
lines changed

docs/src/pages/docs/api.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const {
3131
refetchIntervalInBackground,
3232
queryFnParamsFilter,
3333
refetchOnMount,
34-
alwaysRefetchOnMount,
34+
neverRefetchOnMount,
3535
isDataEqual,
3636
onError,
3737
onSuccess,
@@ -116,10 +116,10 @@ const queryInfo = useQuery({
116116
- Optional
117117
- Defaults to `true`
118118
- If set to `false`, will disable additional instances of a query to trigger background refetches
119-
- `alwaysRefetchOnMount: Boolean`
119+
- `neverRefetchOnMount: Boolean`
120120
- Optional
121121
- Defaults to `false`
122-
- Always refetch on mount sets refetching independent of the number of query instances. If `refetchOnMount` is set to false but only one query instance exists the query would refetch anyway. If `alwaysRefetchOnMount` is set to false though the query will not refetch independent of the number of instances
122+
- Allows for disabling refetching on mount independent of the number of query instances. If `refetchOnMount` is set to false but only one query instance exists the query would refetch anyway. If `neverRefetchOnMount` is set to true though the query will not refetch independent of the number of query instances.
123123
- `queryFnParamsFilter: Function(args) => filteredArgs`
124124
- Optional
125125
- This function will filter the params that get passed to `queryFn`.
@@ -667,7 +667,7 @@ const queryConfig = {
667667
refetchInterval: false,
668668
queryFnParamsFilter: identity,
669669
refetchOnMount: true,
670-
alwaysRefetchOnMount: false,
670+
neverRefetchOnMount: false,
671671
isDataEqual: deepEqual,
672672
onError: noop,
673673
onSuccess: noop,

src/core/config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export const DEFAULT_CONFIG = {
1717
refetchInterval: false,
1818
queryFnParamsFilter: identity,
1919
refetchOnMount: true,
20-
alwaysRefetchOnMount: false,
20+
neverRefetchOnMount: false,
2121
isDataEqual: deepEqual,
2222
onError: noop,
2323
onSuccess: noop,

src/core/queryInstance.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,18 @@ export function makeQueryInstance(query, onStateUpdate) {
5050

5151
instance.run = async () => {
5252
try {
53-
// Perform the refetch for this query if necessary
54-
if (
53+
54+
// Don't refetch on mount when 'neverRefetchOnMount' is set, otherwise only refetch if either only one instance of the query exists or 'refetchOnMount' is set
55+
const shouldRefetchOnMount = query.config.neverRefetchOnMount ? false : (query.config.refetchOnMount || query.instances.length === 1);
56+
57+
if(
58+
(!query.state.isSuccess || shouldRefetchOnMount) && // Make sure first load happens, thereafter only if refetch on mount is requested
5559
query.config.enabled && // Don't auto refetch if disabled
5660
!query.wasSuspended && // Don't double refetch for suspense
57-
query.state.isStale && // Only refetch if stale
58-
((query.config.refetchOnMount || query.instances.length === 1) || query.config.alwaysRefetchOnMount)
61+
query.state.isStale // Only refetch if stale
62+
5963
) {
60-
await query.fetch()
64+
await query.fetch();
6165
}
6266

6367
query.wasSuspended = false

types/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ export interface BaseQueryOptions<TResult = unknown, TError = Error> {
237237
refetchIntervalInBackground?: boolean
238238
refetchOnWindowFocus?: boolean
239239
refetchOnMount?: boolean
240-
alwaysRefetchOnMount?: boolean
240+
neverRefetchOnMount?: boolean
241241
onSuccess?: (data: TResult) => void
242242
onError?: (err: TError) => void
243243
onSettled?: (data: TResult | undefined, error: TError | null) => void

0 commit comments

Comments
 (0)