Skip to content

Commit 3104854

Browse files
fix(vue-query): ensure queryKey match the current value of ref used inside (TanStack#8443)
Co-authored-by: Damian Osipiuk <[email protected]>
1 parent f6757a6 commit 3104854

File tree

1 file changed

+35
-31
lines changed

1 file changed

+35
-31
lines changed

packages/vue-query/src/useQueries.ts

+35-31
Original file line numberDiff line numberDiff line change
@@ -297,11 +297,31 @@ export function useQueries<
297297
defaultedQueries.value,
298298
options as QueriesObserverOptions<TCombinedResult>,
299299
)
300-
const [, getCombinedResult] = observer.getOptimisticResult(
301-
defaultedQueries.value,
302-
(options as QueriesObserverOptions<TCombinedResult>).combine,
303-
)
304-
const state = shallowRef(getCombinedResult())
300+
301+
const getOptimisticResult = () => {
302+
const [results, getCombinedResult] = observer.getOptimisticResult(
303+
defaultedQueries.value,
304+
(options as QueriesObserverOptions<TCombinedResult>).combine,
305+
)
306+
307+
return getCombinedResult(
308+
results.map((result, index) => {
309+
return {
310+
...result,
311+
refetch: async (...args: Array<any>) => {
312+
const [{ [index]: query }] = observer.getOptimisticResult(
313+
defaultedQueries.value,
314+
(options as QueriesObserverOptions<TCombinedResult>).combine,
315+
)
316+
317+
return query!.refetch(...args)
318+
},
319+
}
320+
}),
321+
)
322+
}
323+
324+
const state = shallowRef(getOptimisticResult())
305325

306326
let unsubscribe = () => {
307327
// noop
@@ -313,38 +333,22 @@ export function useQueries<
313333
if (!isRestoring) {
314334
unsubscribe()
315335
unsubscribe = observer.subscribe(() => {
316-
const [, getCombinedResultRestoring] = observer.getOptimisticResult(
317-
defaultedQueries.value,
318-
(options as QueriesObserverOptions<TCombinedResult>).combine,
319-
)
320-
state.value = getCombinedResultRestoring()
336+
state.value = getOptimisticResult()
321337
})
322-
// Subscription would not fire for persisted results
323-
const [, getCombinedResultPersisted] = observer.getOptimisticResult(
324-
defaultedQueries.value,
325-
(options as QueriesObserverOptions<TCombinedResult>).combine,
326-
)
327-
state.value = getCombinedResultPersisted()
338+
339+
state.value = getOptimisticResult()
328340
}
329341
},
330342
{ immediate: true },
331343
)
332344

333-
watch(
334-
defaultedQueries,
335-
() => {
336-
observer.setQueries(
337-
defaultedQueries.value,
338-
options as QueriesObserverOptions<TCombinedResult>,
339-
)
340-
const [, getCombinedResultPersisted] = observer.getOptimisticResult(
341-
defaultedQueries.value,
342-
(options as QueriesObserverOptions<TCombinedResult>).combine,
343-
)
344-
state.value = getCombinedResultPersisted()
345-
},
346-
{ flush: 'sync' },
347-
)
345+
watch(defaultedQueries, (queriesValue) => {
346+
observer.setQueries(
347+
queriesValue,
348+
options as QueriesObserverOptions<TCombinedResult>,
349+
)
350+
state.value = getOptimisticResult()
351+
})
348352

349353
onScopeDispose(() => {
350354
unsubscribe()

0 commit comments

Comments
 (0)