有没有办法在HashRouter和react-router v4中使用历史记录?

时间:2020-08-27 08:29:31

标签: react-router react-router-dom react-router-v4

我需要将用户重定向到React组件之外,这通常是将history与react-router一起使用。

// history.js
const history = createBrowserHistory();
export default history;

// App, setting up router
import { HashRouter as Router } from 'react-router-dom';
import history from './history';
...
<HashRouter history={history}>...</HashRouter> // problem

// Non-component file
import history from './history';
history.push('/target');

由于HashRouter不使用历史记录道具,而是在内部处理历史记录,并且开发人员被指示使用withRouter以便将history暴露给组件,因此这并不明显如何在组件外部进行重定向。

我正在使用HashRouter ,我需要在组件外部使用history(这意味着我不能使用withRouter)。

我该如何实现?

1 个答案:

答案 0 :(得分:0)

是的,有一种方法可以同时使用history和基于哈希的路由器。

创建历史记录实例时,使用createHashHistory代替createBrowserHistory

// myCreatedHistory.js
import { createHashHistory } from 'history';
export default createHashHistory();

代替使用HashRouter,而是使用较低级别的Router,并将history道具传递给它,就像这样。

// App
import { Router } from 'react-router-dom';
import history from '../myCreatedHistory';
...
<Router basename="/" history={history}>...</Router>

然后,您可以从任何地方(例如减速器)导入history

// Reducer, or anywhere
import history from '../myCreatedHistory';
history.push('/target');