diff --git a/packages/react-query/src/__tests__/useQuery.test.tsx b/packages/react-query/src/__tests__/useQuery.test.tsx index cbe64c69fea..491970764c4 100644 --- a/packages/react-query/src/__tests__/useQuery.test.tsx +++ b/packages/react-query/src/__tests__/useQuery.test.tsx @@ -4971,6 +4971,29 @@ describe('useQuery', () => { expect(renders).toBe(hashes) }) + it('should hash query keys that contain bigints given a supported query hash function', async () => { + const key = [queryKey(), 1n] + + function queryKeyHashFn(x: any) { + return JSON.stringify(x, (_, value) => { + if (typeof value === 'bigint') return value.toString() + return value + }) + } + + function Page() { + useQuery({ queryKey: key, queryFn: () => 'test', queryKeyHashFn }) + return null + } + + renderWithClient(queryClient, ) + + await sleep(10) + + const query = queryClient.getQueryCache().get(queryKeyHashFn(key)) + expect(query?.state.data).toBe('test') + }) + it('should refetch when changed enabled to true in error state', async () => { const queryFn = vi.fn<(...args: Array) => unknown>() queryFn.mockImplementation(async () => { diff --git a/packages/react-query/src/useBaseQuery.ts b/packages/react-query/src/useBaseQuery.ts index 32162bc87d8..9ae2aefda6a 100644 --- a/packages/react-query/src/useBaseQuery.ts +++ b/packages/react-query/src/useBaseQuery.ts @@ -70,7 +70,9 @@ export function useBaseQuery< useClearResetErrorBoundary(errorResetBoundary) // this needs to be invoked before creating the Observer because that can create a cache entry - const isNewCacheEntry = !client.getQueryState(options.queryKey) + const isNewCacheEntry = !client + .getQueryCache() + .get(defaultedOptions.queryHash) const [observer] = React.useState( () =>