我试图通过上下文传递路由器,所以我可以在子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不是函数
欢迎任何帮助?
答案 0 :(得分:0)
对我有用的解决方案是在父级上创建一个函数,然后将其传递给上下文。
父:
contextTypes = {
router: React.PropTypes.func.isRequired
};
以及子组件:
childContextTypes = {
router: React.PropTypes.func.isRequired
};
答案 1 :(得分:0)
如果您只是传递router
,请查看将组件包装在高级组件withRouter
可用starting in v2.4中。
react-router
存储库中的大量示例使用此示例,这是一个示例: