如何从组件外部访问路由参数?

时间:2016-02-21 10:22:31

标签: javascript react-router redux

如何从位置计算参数。我使用redux并重新选择。我以前在一些选择器中访问router.params。现在我只能访问routing.location。

我试图在react-router中找到一个帮助函数,但我还没有找到它。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

不幸的是,路由器难以使用。就个人而言,我做了以下解决方法: 在主路径组件(App)中<Route path="/" component={App} />定义了两种方法:

  constructor(props) {
    super(props);
    globalModel.router.set(props);
  }

  componentWillReceiveProps(nextProps) {
    globalModel.router.set(nextProps);
  }

所以我在globalModel中有当前的路由器道具(可能是助焊剂存储)。

答案 1 :(得分:0)

路由器与Redux无关,也无法为您提供state.router.params之类的内容。

您可能会误用其中一个社区软件包,例如redux-router,您仍然可以使用它。您可能切换到更稳定的react-router-redux,但有目的地不允许您访问来自州的路由参数。两个图书馆都在各自的自述文件中解释了它们之间的差异,因此我鼓励您阅读最适合您需求的文章。

您不必使用其中任何一个库!

一般情况下,我们建议您在路由处理程序组件中使用从路由器本身收到的道具。确保它已连接,并使用mapStateToProps的第二个参数来阅读路线参数:

function mapStateToProps(state, ownProps) {
  const id = ownProps.params.id
  return {
    post: state.posts[id]
  }
}

同样,在选择器本身定义第二个props参数时,可以使用Reselect访问道具。重新选择自述文件describes this use case。从技术上讲,你仍然会从你的组件传递params,但你的选择器可以通过这种方式访问​​它们。