我在其他线程中尝试了所有建议的方法,但仍然无法正常工作,这就是为什么我要发布此问题。
所以我history.js看起来像这样
history.js
import { createBrowserHistory } from 'history'; export default createBrowserHistory;
我的 index.js
index.js
render(( <Router history={history}> <div> <Route component={App}/> </div> </Router> ), document.getElementById('root') );
Home.js 看起来像这样
Home.js
class Home extends Component { handleSubmit(e) { e.preventDefault(); let teacherName = e.target.elements[0].value; let teacherTopic = e.target.elements[1].value; let path = `/featured/${teacherName}/${teacherTopic}`; history.push(path); } render() { return ( <div className="main-content home"> <hr /> <h3>Featured Teachers</h3> <form onSubmit={this.handleSubmit}> <input type="text" placeholder="Name"/> <input type="text" placeholder="Topic"/> <button type="submit"> Submit </button> </form> </div> ); } } export default Home;
Home.js实际上是在app.js中路由的,而app.js是在index.js中路由的。
问题是我无法在任何地方访问历史对象。
我尝试过的方法如下
1)this.context.history.push(path)在home.js中-无法访问未定义的上下文
this.context.history.push(path)
2)this.props.history.push(path)在home.js中-无法访问未定义的道具
this.props.history.push(path)
3)browserHistory.push(path)在index.js中-现在已弃用
browserHistory.push(path)
4)上面的方式-_history2.default.push不是函数
我上面尝试过的所有方法均无效。第二个是最奇怪的,因为根据文档https://reacttraining.com/react- router/web/api/Route/Route-render-methods,我应该可以在任何地方访问历史对象作为道具
我知道以前的v2或v3访问历史记录的方式也已弃用。
那么知道如何访问React Router v4中的历史对象的人可以回答这个问题吗?谢谢。
在我看来,您可能会丢失withRouter连接。这将使历史道具可用于此组件
withRouter
... import { withRouter } from 'react-router' class Home extends Component { functionMethod() { const { history: { push } } = this.props; doStuff(); push('/location'); } ... } export default withRouter(Home);
https://reacttraining.com/react- router/web/api/withRouter