嵌套路由和 Switch - 如何传递 props.match.params.id?

Nested routes and Switch - how to pass props.match.params.id?

我一直在尝试理解 React v4 Router 中的嵌套路由和开关。 考虑主路由器看起来像这样(简化):

<Switch>
  <Route path="/" component={LoginPage} exact={true} />
  <Route path="/dashboard/edit/:id" component={DashboardPage} />
  <Route path="/dashboard" component={DashboardPage} />
</Switch>

"dashboard"组件渲染子路由:

  render(){
    return (
      <div className="note">
        <Route to='/edit/:id' render={(props) =>
          <div>
            <NoteList {...props} />
            <EditNotePage {...props} />
          </div>
        } />
      </div>
    )
  }

"EditNotePage" 组件可以通过以下方式访问参数:

const mapStateToProps = (state, props) => ({
  note: state.notes.find((note) => note.id === props.match.params.id
});

这是正确的做法吗? 两次指定“/dashboard/edit/:id”似乎有点多余(?) 一次在主路由器中,一次在仪表板组件中。

但是,如果我不匹配主路由器 "Switch" 中的路由,则 "props.match.params.id" 无法访问,因为 "props.match" 只会指向 "/dashboard" 。

我是否错过了有关 React v4 路由器工作原理的重要信息? :)

亲切的问候 克米特

没有,没有遗漏任何东西。这就是 React Router v4 的工作原理。您定义完整的路线。您可以使用的技巧是您可以获取当前路径并将其添加到您的 "nested path".