【问题标题】:Using nested routes with react-route使用带有 react-route 的嵌套路由
【发布时间】:2016-10-11 18:41:11
【问题描述】:

我的应用中有几个页面有自己的菜单,当然除了主菜单。我希望每次单击子菜单以呈现不同的组件。

有人告诉我,我可以使用 react-routes 做到这一点,但它达到了我被卡住并且不知道从那里去哪里的地步。这是我当前相关代码的示例:

   //app.js
ReactDOM.render(
 <Router history={hashHistory}>
  <Route path="/" component={App} handler={App}>
    <IndexRoute component={Index}/>
    <Route path="about" component={About}>
    </Route>
    <Route path="help" component={Help}>
        <Route path="help/:helpOption" component={HelpPanel}/>
    </Route>

   </Route>
  </Router>,
  destination

);

//help.js
export class HelpPanel extends Component{
render(){

        return (

            <div>{this.props.params.helpOption}</div>
        );
}

}

export class Help extends Component{
  render(){
     return (
         <Grid>
             <Title/>
             <Row className="show-grid">
               <Col lg={2} md={4} sm={4}>
                    <HelpMenu/>
               </Col>
               <Col lg={8} md={8} sm={8}>
                    {this.props.children || "Please select topic from the menu for more information"}
               </Col>

           </Row>
       </Grid>
   );

} }

&lt;HelpMenu/&gt; 组件基本上是一个包含所有选项的侧边菜单,&lt;HelpPanel/&gt; 组件上显示的内容会根据您选择的选项而变化。

我还画了我希望我的屏幕看起来的样子,以防这篇文章不清楚。

最重要的是,我终其一生都无法弄清楚如何根据您选择的菜单选项来更改 HelpPanel 上显示的内容。

【问题讨论】:

  • 您在尝试选择菜单上的项目时是否收到 404?将help/:helpOption 设置为路径我认为实际上需要路径为/help/help/:helpOption
  • 我现在什么都没有,只是警告说没有任何东西符合我当前的路线。这对我来说是意料之中的,因为我不知道什么以及如何将事物与我当前的路线相匹配。
  • 错误代码 404 对应于没有匹配的路由,所以我认为问题在于您没有正确设置 HelpPanel 的路径。尝试将 pathhelp/:helpOption 更改为 /help/:helpOption
  • 恐怕它没有改变任何东西:(
  • 好的,可以试试把路径改成:helpOption吗? 应该发生的是嵌套路由使用父路径作为前缀。

标签: javascript reactjs react-router single-page-application


【解决方案1】:

根据您显示的路线配置,情况看起来还不错,但您尚未显示帮助菜单链接。我怀疑与子路线一起给您带来问题的是:

<Route path="help" component={Help}>
   <Route path="help/:helpOption" component={HelpPanel}/>
</Route>

每个:helpOptioncomponent 应该是那个选项组件。因此,如果您有一个名为 HelpOptionOne 的组件,您可以这样做:

<Route path="help" component={HelpPanel}>
   <Route path="help/:helpOption" component={HelpOptionOne}/>
</Route>

如果为helpOption 建立一个链接,它将如下所示:

&lt;Link to="/help/help/optionOne"&gt;Option 1&lt;/Link&gt;

这可能不是您想要的,但是如果您以这种方式构建 href,它将起作用。你可能想要的是:

<Route path="help" component={HelpPanel}>
   <Route path="/:helpOption" component={HelpOptionOne}/>
</Route>

这会得到你的

&lt;Link to="/help/optionOne"&gt;Option 1&lt;/Link&gt;

子路由在其路径中采用其父路由。你只需要记住这一点。 This is a good part of the documentation to read.

【讨论】:

  • 我想我遗漏了一些东西。例如,我知道如何渲染 HelpOptionOne,但是 HelpOptionTwo、HelpOptionThree 等呢?如果有意义的话,我无法理解我将在代码中的哪个位置区分每个选项将出现的内容。不幸的是,该文档并没有说明清楚。
猜你喜欢
  • 2019-08-28
  • 2014-11-16
  • 2017-10-05
  • 2022-06-11
  • 2016-07-22
  • 2021-01-16
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
相关资源
最近更新 更多