diff --git a/contributors.yml b/contributors.yml index 329dfae023..9fa23bc886 100644 --- a/contributors.yml +++ b/contributors.yml @@ -366,6 +366,7 @@ - valerii15298 - ValiantCat - vdusart +- vezaynk - VictorElHajj - vijaypushkin - vikingviolinist @@ -389,3 +390,4 @@ - yuleicul - zeromask1337 - zheng-chuang + diff --git a/packages/react-router/lib/dom/lib.tsx b/packages/react-router/lib/dom/lib.tsx index e280d79691..342f0d1cb8 100644 --- a/packages/react-router/lib/dom/lib.tsx +++ b/packages/react-router/lib/dom/lib.tsx @@ -1427,8 +1427,14 @@ export function useSearchParams( const newSearchParams = createSearchParams( typeof nextInit === "function" ? nextInit(searchParams) : nextInit ); + + const unchanged = newSearchParams === searchParams || newSearchParams.toString() === searchParams.toString() + // Do not trigger a navigation for unchanged searchParams + // unless if it is meant to update state OR it is used for a flushSync + if (unchanged && navigateOptions.state === undefined && !navigateOptions.flushSync) return Promise.resolve(); hasSetSearchParamsRef.current = true; - navigate("?" + newSearchParams, navigateOptions); + + return navigate("?" + newSearchParams, navigateOptions); }, [navigate, searchParams] ); @@ -2270,3 +2276,4 @@ export function useViewTransitionState( } //#endregion +