@@ -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-
3813export 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