Skip to content

Commit 93c4d6b

Browse files
authored
fix(react-router): implicit navigations causes flicker during rendering (#5905)
Co-authored-by: vsh1h <[email protected]>
1 parent 292b82a commit 93c4d6b

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

examples/react/start-large/src/typePrimitives.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import * as React from 'react'
12
import { Link, redirect, useNavigate } from '@tanstack/react-router'
23
import type {
34
RegisteredRouter,
@@ -20,7 +21,13 @@ export function useCustomNavigate<TRouter extends RegisteredRouter, TOptions>(
2021
): void
2122
export function useCustomNavigate(options: ValidateNavigateOptions): void {
2223
const navigate = useNavigate()
23-
navigate(options)
24+
25+
const useIsomorphicLayoutEffect =
26+
typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect
27+
28+
useIsomorphicLayoutEffect(() => {
29+
navigate(options)
30+
}, [navigate, options])
2431
}
2532

2633
export function MyLink<TRouter extends RegisteredRouter, TOptions>(

examples/solid/start-large/src/typePrimitives.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Link, redirect, useNavigate } from '@tanstack/solid-router'
2+
import { onMount } from 'solid-js'
23
import type {
34
RegisteredRouter,
45
ValidateFromPath,
@@ -21,7 +22,10 @@ export function useCustomNavigate<TRouter extends RegisteredRouter, TOptions>(
2122
): void
2223
export function useCustomNavigate(options: ValidateNavigateOptions): void {
2324
const navigate = useNavigate()
24-
navigate(options)
25+
26+
onMount(() => {
27+
navigate(options)
28+
})
2529
}
2630

2731
export function MyLink<TRouter extends RegisteredRouter, TOptions>(

packages/react-router/src/useNavigate.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as React from 'react'
2+
import { useLayoutEffect } from './utils'
23
import { useRouter } from './useRouter'
34
import type {
45
AnyRouter,
@@ -67,7 +68,7 @@ export function Navigate<
6768
TMaskFrom,
6869
TMaskTo
6970
> | null>(null)
70-
React.useEffect(() => {
71+
useLayoutEffect(() => {
7172
if (previousPropsRef.current !== props) {
7273
navigate(props)
7374
previousPropsRef.current = props

0 commit comments

Comments
 (0)