我有一个侧边栏菜单来更改页面

我发现如果我点击当前路径的菜单项,页面将不会触发重新呈现.

(例如,当前路径为/用户,并单击相同的路径/用户)

当进入页面时,它将调用useEffect来获取数据,但我想再次单击同一链接来重新加载数据,而不是重新加载页面

我有以下react 路由.

 <Routes>
   <Route path="" element={<MainLayout />}>
     <Route path="/user" element={<User />} />
     <Route path="/contact" element={<Contact />} />
     <Route exact path="/" element={<Login />} />
   </Route>
</Routes>

MainLayout.jsx

<Layout>
      <Sidebar />
      <Layout>
        <Header></Header>

        <Content >
          <Outlet />
        </Content>

        <Footer >
           Sorftware
        </Footer>
      </Layout>
</Layout>

Sidr.jsx

<Menu>
  <Menu.Item key="users" >
     <Link to="/user">User</Link>
  </Menu.Item>
</Menu>

*更新: 我删除了index.jsCustomRouter.jsx,因为它似乎与我的问题无关

推荐答案

如果你正在寻找一种在点击Link后触发路由组件重现的方法,那么我建议使用通过different对象的导航操作,即使用散列或传递一些额外的状态,这在每次点击链接时都是不同的.

示例:

import { Link, useNavigate } from "react-router-dom";
import { nanoid } from "nanoid";

...

const navigate = useNavigate();

...

<Link
  to="/user"
  onClick={(e) => {
    e.preventDefault();
    navigate("/user", { state: nanoid() });
  }}
>
  User
</Link>

这里的示例使用Link组件的toprops 来提供有效的目标并提供所有的辅助功能组件.然后附加一个onClick处理程序以防止默认链接操作发生,这样我们就可以传递一些额外的状态有效负载,该负载在每次被调用时都是不同的和随机的.

如果您愿意,可以将此传递状态用作useEffect钩子依赖项.

const { state } = useLocation();

useEffect(() => {
  // run side-effect
}, [state]);

演示

Edit how-to-re-render-the-component-on-same-routing-path-link-to-reactjs

Reactjs相关问答推荐

无法在列表中看到文本

cypress 不能点击SPAN

使用Reaction-Hook-Form时未激发React.js onBlur事件

有没有办法将MUI网格元素与Flex-Start对齐?

是否在Extra Reducer完成作业(job)时触发createListenerMiddleware?

StyleX中的多语言支持

需要特定的数学函数来标准化动画持续时间

在transformResponse中使用来自其他查询的缓存

ReactJS:唯一项目的数量总和

在ReactJS的monaco编辑器中添加美人鱼语法

是的验证:使用 useFieldArray 访问表单值

React - 函数组件 - 点击两次问题处理

onChange in useEffect 的最佳实践

使用 map 循环浏览列表列表中的列表并显示它们

臭名昭著的测试未包含在 act(...) 中

基于标记名的博客详细信息分组没有发生

在复选框中react 检索选中的值

DatePicker MUI 如何在日历左侧显示清除文本

自动重新获取不起作用 - RTK 查询

如何使用 useEffect 和 if 语句 React