File tree Expand file tree Collapse file tree 5 files changed +29
-17
lines changed
Expand file tree Collapse file tree 5 files changed +29
-17
lines changed Original file line number Diff line number Diff line change 1- import { difference , getQueryKeyHashFn , replaceAt } from './utils'
1+ import { difference , replaceAt } from './utils'
22import { notifyManager } from './notifyManager'
33import type { QueryObserverOptions , QueryObserverResult } from './types'
44import type { QueryClient } from './queryClient'
@@ -63,8 +63,6 @@ export class QueriesObserver extends Subscribable<QueriesObserverListener> {
6363 let observer : QueryObserver | undefined = this . observers [ i ]
6464
6565 const defaultedOptions = this . client . defaultQueryObserverOptions ( options )
66- const hashFn = getQueryKeyHashFn ( defaultedOptions )
67- defaultedOptions . queryHash = hashFn ( defaultedOptions . queryKey ! )
6866
6967 if (
7068 ! observer ||
@@ -94,8 +92,6 @@ export class QueriesObserver extends Subscribable<QueriesObserverListener> {
9492 const defaultedOptions = this . client . defaultQueryObserverOptions (
9593 options
9694 )
97- const hashFn = getQueryKeyHashFn ( defaultedOptions )
98- defaultedOptions . queryHash = hashFn ( defaultedOptions . queryKey ! )
9995
10096 if (
10197 ! observer ||
Original file line number Diff line number Diff line change 11import {
22 QueryFilters ,
3- getQueryKeyHashFn ,
3+ hashQueryKeyByOptions ,
44 matchQuery ,
55 parseFilterArgs ,
66} from './utils'
@@ -43,7 +43,8 @@ export class QueryCache extends Subscribable<QueryCacheListener> {
4343 state ?: QueryState < TData , TError >
4444 ) : Query < TQueryFnData , TError , TData > {
4545 const queryKey = options . queryKey !
46- const queryHash = options . queryHash ?? getQueryKeyHashFn ( options ) ( queryKey )
46+ const queryHash =
47+ options . queryHash ?? hashQueryKeyByOptions ( queryKey , options )
4748 let query = this . get < TQueryFnData , TError , TData > ( queryHash )
4849
4950 if ( ! query ) {
Original file line number Diff line number Diff line change 66 parseFilterArgs ,
77 parseQueryArgs ,
88 partialMatchKey ,
9- getQueryKeyHashFn ,
9+ hashQueryKeyByOptions ,
1010} from './utils'
1111import type {
1212 DefaultOptions ,
@@ -456,8 +456,9 @@ export class QueryClient {
456456 } as T
457457
458458 if ( ! defaultedOptions . queryHash && defaultedOptions . queryKey ) {
459- defaultedOptions . queryHash = getQueryKeyHashFn ( defaultedOptions ) (
460- defaultedOptions . queryKey
459+ defaultedOptions . queryHash = hashQueryKeyByOptions (
460+ defaultedOptions . queryKey ,
461+ defaultedOptions
461462 )
462463 }
463464
Original file line number Diff line number Diff line change @@ -140,6 +140,19 @@ describe('queryClient', () => {
140140 expect ( queryClient . getQueryData ( key ) ) . toBe ( 'qux' )
141141 } )
142142
143+ test ( 'should use the same query when using similar string or array query keys' , ( ) => {
144+ const key = queryKey ( )
145+ queryClient . setQueryData ( key , '1' )
146+ expect ( queryClient . getQueryData ( key ) ) . toBe ( '1' )
147+ expect ( queryClient . getQueryData ( [ key ] ) ) . toBe ( '1' )
148+ queryClient . setQueryData ( [ key ] , '2' )
149+ expect ( queryClient . getQueryData ( key ) ) . toBe ( '2' )
150+ expect ( queryClient . getQueryData ( [ key ] ) ) . toBe ( '2' )
151+ queryClient . setQueryData ( key , '1' )
152+ expect ( queryClient . getQueryData ( key ) ) . toBe ( '1' )
153+ expect ( queryClient . getQueryData ( [ key ] ) ) . toBe ( '1' )
154+ } )
155+
143156 test ( 'should accept an update function' , ( ) => {
144157 const key = queryKey ( )
145158
Original file line number Diff line number Diff line change @@ -5,7 +5,6 @@ import type {
55 MutationOptions ,
66 QueryFunction ,
77 QueryKey ,
8- QueryKeyHashFunction ,
98 QueryOptions ,
109} from './types'
1110
@@ -153,8 +152,7 @@ export function matchQuery(
153152
154153 if ( isQueryKey ( queryKey ) ) {
155154 if ( exact ) {
156- const hashFn = getQueryKeyHashFn ( query . options )
157- if ( query . queryHash !== hashFn ( queryKey ) ) {
155+ if ( query . queryHash !== hashQueryKeyByOptions ( queryKey , query . options ) ) {
158156 return false
159157 }
160158 } else if ( ! partialMatchKey ( query . queryKey , queryKey ) ) {
@@ -189,17 +187,20 @@ export function matchQuery(
189187 return true
190188}
191189
192- export function getQueryKeyHashFn (
190+ export function hashQueryKeyByOptions (
191+ queryKey : QueryKey ,
193192 options ?: QueryOptions < any , any >
194- ) : QueryKeyHashFunction {
195- return options ?. queryKeyHashFn || hashQueryKey
193+ ) : string {
194+ const hashFn = options ?. queryKeyHashFn || hashQueryKey
195+ return hashFn ( queryKey )
196196}
197197
198198/**
199199 * Default query keys hash function.
200200 */
201201export function hashQueryKey ( queryKey : QueryKey ) : string {
202- return stableValueHash ( queryKey )
202+ const asArray = Array . isArray ( queryKey ) ? queryKey : [ queryKey ]
203+ return stableValueHash ( asArray )
203204}
204205
205206/**
You can’t perform that action at this time.
0 commit comments