Skip to content

Commit d3aae09

Browse files
committed
Trigger redirect from cDC instead of useEffect`
1 parent 4955c5d commit d3aae09

File tree

1 file changed

+18
-32
lines changed

1 file changed

+18
-32
lines changed

packages/next/src/client/components/redirect-boundary.tsx

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,31 +10,6 @@ interface RedirectBoundaryProps {
1010
children: React.ReactNode
1111
}
1212

13-
function HandleRedirect({
14-
redirect,
15-
reset,
16-
redirectType,
17-
}: {
18-
redirect: string
19-
redirectType: RedirectType
20-
reset: () => void
21-
}) {
22-
const router = useRouter()
23-
24-
useEffect(() => {
25-
React.startTransition(() => {
26-
if (redirectType === RedirectType.push) {
27-
router.push(redirect, {})
28-
} else {
29-
router.replace(redirect, {})
30-
}
31-
reset()
32-
})
33-
}, [redirect, redirectType, reset, router])
34-
35-
return null
36-
}
37-
3813
export class RedirectErrorBoundary extends React.Component<
3914
RedirectBoundaryProps,
4015
{ redirect: string | null; redirectType: RedirectType | null }
@@ -44,6 +19,23 @@ export class RedirectErrorBoundary extends React.Component<
4419
this.state = { redirect: null, redirectType: null }
4520
}
4621

22+
componentDidCatch(error: Error): void {
23+
if (isRedirectError(error)) {
24+
const { redirect, redirectType } = this.state
25+
if (redirect !== null && redirectType !== null) {
26+
const { router } = this.props
27+
React.startTransition(() => {
28+
if (redirectType === RedirectType.push) {
29+
router.push(redirect, {})
30+
} else {
31+
router.replace(redirect, {})
32+
}
33+
this.setState({ redirect: null })
34+
})
35+
}
36+
}
37+
}
38+
4739
static getDerivedStateFromError(error: any) {
4840
if (isRedirectError(error)) {
4941
const url = getURLFromRedirectError(error)
@@ -58,13 +50,7 @@ export class RedirectErrorBoundary extends React.Component<
5850
render(): React.ReactNode {
5951
const { redirect, redirectType } = this.state
6052
if (redirect !== null && redirectType !== null) {
61-
return (
62-
<HandleRedirect
63-
redirect={redirect}
64-
redirectType={redirectType}
65-
reset={() => this.setState({ redirect: null })}
66-
/>
67-
)
53+
return null
6854
}
6955

7056
return this.props.children

0 commit comments

Comments
 (0)