허용 대답 Similiary 당신이 할 수있는 것은 사용하는 것입니다 react
및 react-router
자체는 당신이 제공하는 history
어떤 개체는 다음 파일의 범위와 수출을 할 수 있습니다.
history.js
import React from 'react';
import { withRouter } from 'react-router';
// variable which will point to react-router history
let globalHistory = null;
// component which we will mount on top of the app
class Spy extends React.Component {
constructor(props) {
super(props)
globalHistory = props.history;
}
componentDidUpdate() {
globalHistory = this.props.history;
}
render(){
return null;
}
}
export const GlobalHistory = withRouter(Spy);
// export react-router history
export default function getHistory() {
return globalHistory;
}
그런 다음 나중에 구성 요소를 가져오고 마운트하여 기록 변수를 초기화합니다.
import { BrowserRouter } from 'react-router-dom';
import { GlobalHistory } from './history';
function render() {
ReactDOM.render(
<BrowserRouter>
<div>
<GlobalHistory />
//.....
</div>
</BrowserRouter>
document.getElementById('app'),
);
}
그런 다음 마운트 된 앱에서 가져올 수 있습니다.
import getHistory from './history';
export const goToPage = () => (dispatch) => {
dispatch({ type: GO_TO_SUCCESS_PAGE });
getHistory().push('/success'); // at this point component probably has been mounted and we can safely get `history`
};
나는 심지어 그것을하는 npm 패키지 를 만들었습니다 .