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

How to access the routing params from outside a component?

如何根据位置计算参数。我正在使用 redux 并重新选择。我曾经在我的一些选择器中访问 router.params 。现在我只能访问 routing.location.

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

感谢您的帮助!

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

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

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

所以我在 globalModel 中有当前的路由器属性(可能是 flux store)。

路由器与 Redux 无关,无法向您提供 state.router.params 之类的东西。

你可能会把它误认为是像 redux-router which you can still use. You probably switched to react-router-redux 这样的社区包之一,它更稳定但故意不让你访问来自状态的路由参数。这两个库都在各自的 README 中解释了它们的差异,因此我鼓励您阅读这两个库并选择更适合您需求的那个。

虽然您不必使用这些库中的任何一个!

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

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

类似地,当您在选择器本身上定义第二个 props 参数时,您可以使用 Reselect 访问道具。 Reselect 自述文件 describes this use case。从技术上讲,您仍在传递组件中的参数,但您的选择器可以通过这种方式访问​​它们。