From 0c68be755d011f478d737fe389572f419ce62bc4 Mon Sep 17 00:00:00 2001 From: Francois Best Date: Mon, 7 Oct 2024 19:53:09 +0200 Subject: [PATCH] chore: Fix useEffect loop due to referential inconsistency of default value --- packages/nuqs/src/useQueryStates.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/nuqs/src/useQueryStates.ts b/packages/nuqs/src/useQueryStates.ts index 5af36e98..26462c7b 100644 --- a/packages/nuqs/src/useQueryStates.ts +++ b/packages/nuqs/src/useQueryStates.ts @@ -49,6 +49,11 @@ export type UseQueryStatesReturn = [ SetValues ] +// Ensure referential consistency for the default value of urlKeys +// by hoisting it out of the function scope. +// Otherwise useEffect loops go brrrr +const defaultUrlKeys = {} + /** * Synchronise multiple query string arguments to React state in Next.js * @@ -66,7 +71,7 @@ export function useQueryStates( throttleMs = FLUSH_RATE_LIMIT_MS, clearOnDefault = false, startTransition, - urlKeys = {} + urlKeys = defaultUrlKeys }: Partial< UseQueryStatesOptions & { // todo: Move into UseQueryStatesOptions in v2 (requires a breaking change @@ -110,7 +115,7 @@ export function useQueryStates( ) setInternalState(state) }, [ - Object.keys(keyMap) + Object.keys(urlKeys) .map(key => initialSearchParams?.get(key)) .join('&'), stateKeys,