未捕获(承诺)TypeError:_this2.context.router.push不是函数

时间:2017-04-12 11:57:06

标签: javascript reactjs redirect react-router

我尝试在点击提交按钮后重定向我的页面,为此,我的onSubmit方法看起来像;

onSubmit(e){
    e.preventDefault();

    if (this.isValid()){
      this.setState({ errors: {}, isLoading: true });
      this.props.userSignupRequest(this.state).then(
        () => {
          this.context.router.push('/');
        },
        ( data ) => this.setState({ errors: data.response.data, isLoading: false })
      );
    }
  }

我的 propTypes contextTypes ;

SignupForm.propTypes = {
  userSignupRequest: React.PropTypes.func.isRequired
}

SignupForm.contextTypes = {
  router: React.PropTypes.object.isRequired
}

我不知道为什么,但它一直显示错误而不是重定向。 我还尝试了 browserHistory.push('/'),但它也没有用。

我接受的错误是;

Uncaught (in promise) TypeError: _this2.context.router.push is not a function
    at props.userSignupRequest.then._this2.setState.errors

正如我所说,我也尝试过 browserHistory ;

import { browserHistory } from 'react-router';

和onSubmit方法;

  onSubmit(e){
    e.preventDefault();

    if (this.isValid()){
      this.setState({ errors: {}, isLoading: true });
      this.props.userSignupRequest(this.state).then(
        () => {
          browserHistory.push('/');
        },
        ( data ) => this.setState({ errors: data.response.data, isLoading: false })
      );
    }
  }

我的路由器也像;

const router = (<Provider store={store}>
                  <Router history={browserHistory}>{routes}</Router>
                </Provider>);

它抛出的错误与另一个错误相同。

Uncaught (in promise) TypeError: Cannot read property 'push' of undefined
    at props.userSignupRequest.then._this2.setState.errors 

如果还需要更多内容,请在下面添加,我会修改我的帖子。

感谢。

1 个答案:

答案 0 :(得分:5)

我通过更改下面的代码解决了这个问题。

  this.context.router.push('/');

在大于等于4.0.0的react-router版本中,此推送方法移至&#34; 历史&#34;方法及其新版本似乎;

  this.context.router.history.push('/');

这很好用,解决了我的问题。

注意

你可以从&#39; 反应&#39;中看到我说的话。浏览器的标签页。

enter image description here