javascript Antd渲染< Menu />组件两次会导致:无法执行React状态更新

cgvd09ve  于 2023-05-15  发布在  Java
关注(0)|答案(1)|浏览(219)

出于某种原因,我需要在两个不同的组件中使用我的CustomMenu组件,但是当我在这两个组件之间或从另一个组件中导航时,React给出了:
警告:无法在未挂载的组件上执行React状态更新。这是一个空操作,但它表明应用程序中存在内存泄漏。要修复,请取消useEffect清理函数中的所有订阅和异步任务。
如何解决此问题?下面是重现错误的简单代码:
https://codesandbox.io/s/antd-playground-forked-1fxmqk?file=/src/index.js

1szpjjfi

1szpjjfi1#

产生错误的原因是您正在“/”处呈现菜单本身。当你到达另一条路时,例如。'/component-one'你再次渲染它。一个简单的解决方法是像这样放置菜单:

function App() {
  return (
    <BrowserRouter>
    <CustomMenu /> // By placing above the routes it always renders.
      <Routes>
        <Route element={<ComponentOne />} path="/component-one" />
        <Route element={<ComponentTwo />} path="/component-two" />
      </Routes>
    </BrowserRouter>
  )
}

这使得菜单始终呈现。然后停止它重新渲染再次删除它的组件,例如:

const ComponentTwo = () => {
  return (
    <>
      <div>Component Two</div>
    </>
  )
}

此外,良好的做法是将组件放置在路由器上的'/'处作为着陆位置,否则除非已经在其中一条路由上,否则不会呈现任何内容。

相关问题