我准备了a simple test case at Github个问题:

screenshot

在我的App.jsx中有以下代码:

<NavDrawer />

<BrowserRouter>
  <Routes>
    <Route path="page1" element={<Page1 />} />
    <Route path="page2" element={<Page2 />} />
    <Route path="page3" element={<Page3 />} />
    <Route path="*" element={<Page4 />} />
  </Routes>
</BrowserRouter>

NavDrawer.jsx米中,我有这样的代码:

const drawerLinks = [
  { text: "Page 1", path: "/page1", icon: <CarCrash /> },
  { text: "Page 2", path: "/page2", icon: <Help /> },
  { text: "Page 3", path: "/page3", icon: <Directions /> },
  { text: "Page 4", path: "/page4", icon: <CarRepair /> },
];

function MyListItem({ text, path, icon }) {
  return (
    <ListItem disablePadding>
      <ListItemButton>
        <ListItemIcon>{icon}</ListItemIcon>
        <Link to={path}>
          <ListItemText primary={text} />
        </Link>
      </ListItemButton>
    </ListItem>
  );
}

export default function NavDrawer() {
  return (
    <Drawer>
      <BrowserRouter>
        <nav>
          <List>
            {drawerLinks.map((item, index) => (
              <MyListItem key={index} icon={item.icon} text={item.text} />
            ))}
          </List>
        </nav>
      </BrowserRouter>
    </Drawer>
  );
}

不幸的是,当我点击Drawer中的Link时,什么也没有发生,显示的页面保持Page4,并且控制台中没有打印任何消息或错误.

推荐答案

NavDrawer组件呈现其自己的BrowserRouter组件,与App呈现的BrowserRouter完全分开.在NavDrawer中点击的链接由NavDrawer‘S路由处理,而另一个主路由完全不知道任何被影响和处理的导航操作.

每个应用程序只需要一个路由,通常位于应用程序的根级别或接近根级别.

NavDrawer中删除BrowserRouter,并将NavDrawer嵌套在根BrowserRouter组件下,以便一个路由处理所有导航操作.

export default function NavDrawer() {
  return (
    <Drawer>
      <nav>
        <List>
          {myLinks.map((item, index) => (
            <MyListItem key={index} icon={item.icon} text={item.text} />
          ))}
        </List>
      </nav>
    </Drawer>
  );
}
<BrowserRouter>
  <NavDrawer /> // <-- rendered within routing context
  <Routes>
    <Route path="page1" element={<Page1 />} />
    <Route path="page2" element={<Page2 />} />
    <Route path="page3" element={<Page3 />} />
    <Route path="*" element={<Page4 />} />
  </Routes>
</BrowserRouter>

Reactjs相关问答推荐

Reaction-路由v6动态路径RegExp

如何使用Reaction Testing Library+Vitest正确更新单元测试中的输入?

在Reaction中导入';图片&文件夹时出错

蚂蚁 Select .列表弹出窗口不会';有时不会出现

在任何渲染之前在ReactJs中获取数据

滚动视图样式高度没有任何区别

React Todo List 应用程序我在实现删除功能时遇到问题

在React中使用if条件时如何更改Tailwind中元素的文本 colored颜色

React 无效的钩子调用:如何避免嵌套钩子?

我可以在加载器函数中多次 fetch() 并使用一次 useloaderdata() 提取它吗?

当`useSelector`回调中的属性值更新时,将会使用更新后的值吗?

在react 中单击父级中的按钮时如何将数据从子级发送到父级?

从服务器获取数据时未定义,错误非法调用

Reactjs 表单未反映提交时的更改

不能在我的代码中使用 .给我一个警告!有人知道解决方案吗?

使用输入类型文本对 useState 和日期做出react

为什么此代码中的 useState 不更新(文本更新但 id 不更新)?

如何用实际的br标签替换axios响应中的br标签?

在react 钩子中将数组添加到数组状态给出一个数字

Cypress 中的 process.env 空对象