Ric*_*eso 1 reactjs react-router
在旧版本的React Router中,该状态具有一个redirectPath状态对象,您可以从中获取以前的URL。在新版本中,情况不再如此。通过history.push导航到新URL时,显示的只是新URL,没有明显的方法来获取先前导航的URL。React Router或历史包本身是否有一些功能可以让您获取以前的URL?
我们正在使用goBack,这似乎可行,但是如果用户要转到应用程序之外的页面(例如google)并返回到该应用程序,则goBack函数将再次路由至google。我们该如何解决?
谢谢
你可以state: {}像这样推送额外的信息
<Link to={{ pathname: '/about', state: { fromHome: true } }}>About</Link>
Run Code Online (Sandbox Code Playgroud)
然后,当路线更改时,您可以访问state对象并检查用户如何导航到您的路线。
今天,我创建了包含以下react-router-last-location内容的软件包:
withLastLocation(),lastLocation作为道具传递给您的组件的高阶组件<LastLocationProvider />应该在内部使用的组件<Router />。用法示例
您应用的入口
import React from 'react';
import { render } from 'react-dom';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
import { LastLocationProvider } from 'react-router-last-location';
import Home from './pages/Home';
import About from './pages/About';
import Contact from './pages/Contact';
import Logger from './components/Logger';
const App = () => (
<Router>
<LastLocationProvider>
<div>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
<li><Link to="/contact">Contact</Link></li>
</ul>
<hr />
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
<hr />
<Logger />
</div>
</LastLocationProvider>
</Router>
);
render(<App />, document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)
有权访问最后一个位置的组件
import React from 'react';
import { withLastLocation } from 'react-router-last-location';
const Logger = ({ lastLocation }) => (
<div>
<h2>Logger!</h2>
<pre>
{JSON.stringify(lastLocation)}
</pre>
</div>
);
export default withLastLocation(Logger);
Run Code Online (Sandbox Code Playgroud)
您可以从npm安装它
npm install react-router-last-location --save
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6046 次 |
| 最近记录: |