通过上下文将路由器传递给子组件

时间:2015-08-19 11:53:20

标签: react-router

我试图通过上下文传递路由器,所以我可以在子React.Component上调用navigateTo。

目的:
登录成功后,我需要远离登录 策略:
1. Passdown Router到childe登录组件。
2.成功登录呼叫时,路由器上的导航(' / startpage')已传下来。

我在包含Run:

的页面/组件上有这个
Router.run(routes, function (Handler) {
    React.render(<Handler/>, document.body);
});

以下上下文设置:

getChildContext() {
    return {
        router: Router
    };
}

和childContextTypes:

childContextTypes = {
    router: React.PropTypes.object.isRequired
};

对于孩子本身:

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

如果我使用"router: React.PropTypes.string.isRequired",则上下文设置正常。注意字符串,但在使用对象时我得到:

但是当我尝试使用对象时,我会得到错误:

  

警告:失败的上下文类型:无效的上下文&#39;路由器&#39;类型&#39;对象&#39;提供给NavItemLink&#39;,期望&#39;功能&#39;。检查

的渲染方法

  

未捕获的TypeError:this.context.router.isActive不是函数

欢迎任何帮助?

2 个答案:

答案 0 :(得分:0)

对我有用的解决方案是在父级上创建一个函数,然后将其传递给上下文。

父:

contextTypes = {
        router: React.PropTypes.func.isRequired
    };

以及子组件:

childContextTypes = {
        router: React.PropTypes.func.isRequired
    };

答案 1 :(得分:0)

如果您只是传递router,请查看将组件包装在高级组件withRouter可用starting in v2.4中。

react-router存储库中的大量示例使用此示例,这是一个示例:

https://github.com/ReactTraining/react-router/blob/v2.8.1/examples/passing-props-to-children/app.js#L9

相关问题