微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何在新的React Router v4中访问历史对象

我已经在其他线程中尝试了所有建议的方法,但它仍然无法正常工作,这就是我发布问题的原因.

所以我有history.js看起来像这样

import { createbrowserHistory } from 'history';

export default createbrowserHistory;

我的index.js

render((
        <Router history={history}>
            <div>
                <Route component={App}/>
            </div>
        </Router>
    ),document.getElementById('root')
);

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中路由的,它在index.js中路由.

问题是我无法在任何地方访问历史对象.

我尝试过的方法如下

1)home.js中的this.context.history.push(path) – 无法访问undefined的上下文

2)home.js中的this.props.history.push(path) – 无法访问undefined的道具

3)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连接.这将使历史道具可用于此组件
...

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐