From 9cce07c6e41c0484d9c37f885e1bacc49e44b30a Mon Sep 17 00:00:00 2001 From: Slava Knyazev Date: Thu, 15 May 2025 11:49:39 -0400 Subject: [PATCH 1/4] setSearchParams should not navigate if the state is unchanged --- packages/react-router/lib/dom/lib.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/react-router/lib/dom/lib.tsx b/packages/react-router/lib/dom/lib.tsx index e280d79691..a590aae061 100644 --- a/packages/react-router/lib/dom/lib.tsx +++ b/packages/react-router/lib/dom/lib.tsx @@ -1427,8 +1427,11 @@ export function useSearchParams( const newSearchParams = createSearchParams( typeof nextInit === "function" ? nextInit(searchParams) : nextInit ); + + if (newSearchParams === searchParams) return Promise.resolve(); hasSetSearchParamsRef.current = true; - navigate("?" + newSearchParams, navigateOptions); + + return navigate("?" + newSearchParams, navigateOptions); }, [navigate, searchParams] ); @@ -2270,3 +2273,4 @@ export function useViewTransitionState( } //#endregion + From d618e2bbe8b2606c0a6deeb1836be46716faefe9 Mon Sep 17 00:00:00 2001 From: Slava Knyazev Date: Thu, 15 May 2025 14:41:05 -0400 Subject: [PATCH 2/4] add contributors.yml --- contributors.yml | 2 ++ 1 file changed, 2 insertions(+) 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 + From 985ff0661e97fed4515bb82a661f567ee8d840d7 Mon Sep 17 00:00:00 2001 From: Slava Knyazev Date: Thu, 15 May 2025 18:43:12 +0000 Subject: [PATCH 3/4] Add toString check --- packages/react-router/lib/dom/lib.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react-router/lib/dom/lib.tsx b/packages/react-router/lib/dom/lib.tsx index a590aae061..1600a93d60 100644 --- a/packages/react-router/lib/dom/lib.tsx +++ b/packages/react-router/lib/dom/lib.tsx @@ -1428,7 +1428,8 @@ export function useSearchParams( typeof nextInit === "function" ? nextInit(searchParams) : nextInit ); - if (newSearchParams === searchParams) return Promise.resolve(); + const unchanged = newSearchParams === searchParams || newSearchParams.toString() === searchParams.toString() + if (unchanged) return Promise.resolve(); hasSetSearchParamsRef.current = true; return navigate("?" + newSearchParams, navigateOptions); From 78b548233ae68a731ef9a52ffea8eaf26060f144 Mon Sep 17 00:00:00 2001 From: Slava Knyazev Date: Wed, 4 Jun 2025 17:35:44 -0400 Subject: [PATCH 4/4] Update lib.tsx --- packages/react-router/lib/dom/lib.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/react-router/lib/dom/lib.tsx b/packages/react-router/lib/dom/lib.tsx index 1600a93d60..342f0d1cb8 100644 --- a/packages/react-router/lib/dom/lib.tsx +++ b/packages/react-router/lib/dom/lib.tsx @@ -1429,7 +1429,9 @@ export function useSearchParams( ); const unchanged = newSearchParams === searchParams || newSearchParams.toString() === searchParams.toString() - if (unchanged) return Promise.resolve(); + // 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; return navigate("?" + newSearchParams, navigateOptions);