React 路由器:在每个 <Link> 导航上执行自定义函数

IT技术 javascript reactjs react-router
2021-05-04 03:47:55

对不起,如果这已经得到回答。但是有没有办法在每个<Link>导航上执行自定义函数最好不创建自定义<Link>包装器。

我想在我的应用程序中的每次导航之前将一些信息放入 sessionStorage。

谢谢

3个回答

您可以onClick用来执行任何操作,例如

<Link
  to="/"
  onClick={() => console.log('Heading to /')} />

替换console.log为执行sessionStorage更新等操作的函数,仅此而已。


另一种方法是使用组件的onEnterpropRoute来执行每个路径输入的特定功能:

<Route
  path="/"
  component={App}
  onEnter={() => console.log('Entered /')} />

请参阅参考资料,或使用 react-router 和 react-redux 的示例

我确实在寻找这个答案,但在任何地方都找不到,然后我做了一些实验,这是对我有帮助的答案,所以我想我会分享!

如果你使用React Routeruselocation钩子。这个钩子为您提供了一个具有关键属性的对象,该属性在每次路由器更改时都会更改。然后,您可以创建一个 useEffect 来监视此属性并在该更改时触发一个函数请参阅下面的示例

const location = useLocation();
useEffect(() => {
    console.log('location', location.key); // { key: "3uu089" }
    // Fire whatever function you need.
    sessionStorage.setItem('whatever', state);

}, [location.key]);

您可以像下面这样在react-router的路由对象上调用任何函数:

function someFunction(a,b){ 
 const c = a + b;
 return c
} 


<Switch>
  <Route exact exact path="/" component={SomeComponent} />
  <Route path="/reload" render= {(props)=>someFunction() } />
</Switch>