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(
() =>