当从一个BrowserRouter
导航到其他BrowserRouter
时,它显示“超过最大更新深度”。
警告:已超过最大更新深度。当>组件在useEffect中调用setState时,可能会发生这种情况,但useEffect要么>没有依赖数组,要么依赖关系之一在>每次渲染时都会更改。
应用程序代码
export const App = () => {
return (
<ErrorBoundary>
<BrowserRouter basename="">
<Navigate to="base-route" />
</BrowserRouter>
<BrowserRouter basename="base-route">
<Router />
</BrowserRouter>
</ErrorBoundary>
);
};
1条答案
按热度按时间laik7k3q1#
第一个路由器无条件地渲染
Navigate
组件,该组件创建渲染循环。在路线上渲染Navigate
,例如"/"
,所以只有当"/"
路径匹配时才被***有条件地***调用。示例:
请注意,通过这样做,具有
"/base-route"
路径的第二个路由器将不知道由第一个路由器调度和处理的导航操作,并且不会重新呈现以显示正确的路由内容。您可以在客户端通过一个小的重构来解决这个问题,以额外触发页面重新加载。示例:
如果您希望避免这种客户端页面重新加载,那么您应该将服务器配置为对第一个URL返回301响应以重定向客户端,例如浏览器到第二个URL。