使用带有 react-route 的嵌套路由

IT技术 javascript reactjs react-router single-page-application
2021-05-20 23:52:34

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

有人告诉我我可以用 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>
   );

} }

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

在此处输入图片说明

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

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

1个回答

根据您显示的路由配置,事情看起来还不错,但您还没有显示帮助菜单链接。我怀疑与孩子路线一起,是什么给你带来了问题:

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

component每一个:helpOption应该是选择组件。所以如果你有一个组件被调用,HelpOptionOne你会这样做:

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

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

<Link to="/help/help/optionOne">Option 1</Link>

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

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

这将得到你的

<Link to="/help/optionOne">Option 1</Link>

子路由在其路径中采用父路由。你只需要记住这一点。这是阅读文档的一个很好的部分