2016-05-10 22 views
1

我在学习React JavaScript库。 我想创建一个简单的网页应用程序与以下布局:菜单+子菜单+内容。我使用反应15.0.2,react-router 2.4.0,babel 6.5.2和webpack 1.13.0。react:menu + submenu + content

我能够创建菜单+内容布局,但我不知道添加子菜单部分的最佳做法是什么。

我的应用程序是这样的:

Home ~ About ~ Contact ~ Profile 

content... 

我想配置文件菜单项下添加一个子菜单,但第3菜单项没有子菜单。所以如果我点击About和Contact链接,我想看到主菜单栏下的正确内容。如果我点击配置文件链接,那么需要显示一个子菜单。点击子菜单项的内容需要在菜单+子对来显示:

Home ~ About ~ Contact ~ Profile 

Profile-Submenu 1 ~ Profile-Submenu 2 ~ ... 

content... 

App.js

ReactDom.render(
    <Router> 
     <Route component={MainLayout}> 
      <Route path="/" component={Home} /> 
      <Route path="home" component={Home} /> 
      <Route path="about" component={About} /> 
      <Route path="contact" component={Contact} /> 
      <Route path="profile" component={Profile} /> 
     </Route> 
    </Router>, 
    document.getElementById('root') 
); 

MainLajout.js

export default class MainLayout extends React.Component { 
    render() { 
     return (
      <div> 
       <MainMenu /> 
       <main>{this.props.children}</main> 
      </div> 
     ); 
    } 
} 

MainMenu.js

export default class MainMenu extends React.Component { 
    render() { 
     return (
      <div style={style.container}> 
       <Link to='/'>Home</Link> 
       {'\u00a0'}~{'\u00a0'} 
       <Link to='/about'>About</Link> 
       {'\u00a0'}~{'\u00a0'} 
       <Link to='/contact'>Contact</Link> 
       {'\u00a0'}~{'\u00a0'} 
       <Link to='/profile'>Profile</Link> 
      </div> 
     ); 
    } 
} 

你能指导我吗到正确的方向?

+0

看看这个:https://www.npmjs.com/包/ react-nav-bar可能是有用的 –

回答

3

你也许可以通过电流路径作为道具MainMenu

export default class MainLayout extends React.Component { 
    render() { 
     return (
      <div> 
       <MainMenu path={this.props.location.pathname} /> 
       <main>{this.props.children}</main> 
      </div> 
     ); 
    } 
} 

然后在你的主菜单

export default class MainMenu extends React.Component { 
    render() { 
     let submenu = null; 
     if (/^\/profile/.test(this.props.path)) { 
      submenu = <div style={style.submenu}> 
       <Link to='/profile/submenu-1'>Submenu 1</Link> 
       <Link to='/profile/submenu-2'>Submenu 2</Link> 
      </div> 
     } 
     return (<div> 
      <div style={style.container}> 
       <Link to='/'>Home</Link> 
       {'\u00a0'}~{'\u00a0'} 
       <Link to='/about'>About</Link> 
       {'\u00a0'}~{'\u00a0'} 
       <Link to='/contact'>Contact</Link> 
       {'\u00a0'}~{'\u00a0'} 
       <Link to='/profile'>Profile</Link> 
      </div> 
      {submenu} 
     </div>); 
    } 
} 
+0

谢谢,它的作品像一个魅力。 我只有一个小小的评论:{子菜单}需要在div元素之间:

mainmenu
{submenu}
。 – zappee

+0

哦,是的,我的发帖太快了。我会用那个更新答案 – hampusohlsson