javascript - React Router 通过自点击链接重新渲染组件

标签 javascript reactjs react-router react-router-dom

我使用react-router-dom v6

代码

<NavLink to="/pathOne" className="ripple">label1</NavLink>
<NavLink to="/pathTwo" className="ripple">label2</NavLink>

问题

当您单击一个链接或另一个链接时,Route 组件将按其应有的方式呈现。但是,如果 "/pathOne" 处于事件状态并且我再次单击它怎么办?什么也没发生。

有没有办法通过单击事件链接来强制重新渲染路由元素?

如果我设置了 reloadDocument 属性,我可以刷新所有页面,但这不是一个选项。

最佳答案

如果您真正想要的只是让路由组件在每次单击其路由的链接时重新呈现,那么只需让这些组件调用 useLocation Hook 即可。每次单击链接时,都会创建一个新的 location 对象引用。新的 location 对象引用足以触发使用它的组件重新渲染。

示例:

const PathOne = () => {
  useLocation();

  useEffect(() => {
    console.log("PathOne rerender");
  });

  return <h1>PathOne</h1>;
};

const PathTwo = () => {
  useEffect(() => {
    console.log("PathTwo rerender");
  });

  return <h1>PathTwo</h1>;
};
function App() {
  return (
    <div className="App">
      <NavLink to="/pathOne" className="ripple">
        label1
      </NavLink>
      <NavLink to="/pathTwo" className="ripple">
        label2
      </NavLink>
      <Routes>
        <Route path="/pathOne" element={<PathOne />} />
        <Route path="/pathTwo" element={<PathTwo />} />
      </Routes>
    </div>
  );
}

Edit react-router-rerender-component-by-selfclicking-a-link

关于javascript - React Router 通过自点击链接重新渲染组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76709807/

相关文章:

javascript - document.getElementById 与 SMARTY 变量

javascript - jQuery/Javascript 视差代码 - 解释

javascript - 在useEffect中调用函数后在antd库的输入字段内设置默认值

javascript - 从其高阶组件中获取包装组件的名称

javascript - 在 Angular2+ 中使用 Mozilla 的带分隔符示例的连接字符串?

javascript - Svg.js 中的同步容器和对象

javascript - React - 子组件能否将值发送回父表单

javascript - React 链接更新 URL 但页面未更改/呈现

javascript - react-router 1.0 : using this. props.children 而不是 RouteHandler

javascript - 忽略 react 路由器路由