首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >react-router“无法读取未定义的属性'push‘”

react-router“无法读取未定义的属性'push‘”
EN

Stack Overflow用户
提问于 2016-08-28 01:46:16
回答 7查看 48K关注 0票数 11

我对react和react-router非常陌生。

react的问题是,在我的应用程序react-router的一些页面上,react-router正在工作,一些页面给出了这样的错误:“无法读取未定义的属性'push‘”。

我使用的是react 0.14.1

我的路由代码如下所示:

代码语言:javascript
复制
render(
<Router history={hashHistory}>
  <Route path="/" component={Loginpanel}/>
  <Route path="Index" component={Index}/>
  <Route path="Form" component={Form} />
  <Route path="Checkindex" component={Index}/>

  <Route path="Signup" component={Signup}/>
  <Route path="Admin" component={Admin}/>
  <Route path="AdminEditDetails" component={AdminEditDetails}/>
  <Route path="AdminDetails" component={AdminDetails}/>


</Router>,
document.getElementById('js-main'));

我的组件现在是这样的:

代码语言:javascript
复制
class  App extends React.Component {

  constructor(props) {
    super(props);
    this.state= {      
      comments: AppStore.getAll();
    };
  }

  componentWillMount() {  
    var length = this.state.comments.length;
    var firstnumber = length - 4;

    if(length == 0){
      console.log("here comes");
      this.props.router.push('/');
    }
    else{
      console.log('work normally');
    }
  }

}

有人能帮我吗?谢谢。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-08-28 02:08:56

您的应用程序的道具中没有为您提供Cannot read property 'push' of undefined的路由器实例。

我假设您正在导入withRouter来获取路由器的实例,所以如果您仍然想要使用它,那么您需要将组件包装在其中……(示例here,但不建议)

相反,以编程方式导航的更好方法是使用

componentWillMount生命周期事件中的import { hashHistory } from 'react-router;' ... hashHistory.push('/');

文档是here格式的

希望这能有所帮助!

票数 3
EN

Stack Overflow用户

发布于 2016-08-28 04:22:34

直接从react-router使用hashHistory当然是一种选择,但这会使单元测试更加痛苦。浏览器历史记录通常在运行测试的上下文中不可用,并且模拟出一个道具比模拟出一个全局API更容易。

考虑使用react-router提供的withRouter高阶组件(从v2.4.0开始)。

代码语言:javascript
复制
import { withRouter } from 'react-router';

class App extends Component {

    (...)

}

export default withRouter(App);

您的App类将通过props接收router,您可以安全地执行this.props.router.push('/');

票数 15
EN

Stack Overflow用户

发布于 2018-07-30 14:14:21

如果您使用分部组件,并像<Header />一样调用它,那么您应该用<Header {...this.props} />替换它

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39184049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档