React:菜单+子菜单+内容

3
我正在学习React JavaScript库。 我想创建一个简单的Web应用程序,它具有以下布局:菜单+子菜单+内容。 我使用React 15.0.2,react-router 2.4.0,babel 6.5.2和webpack 1.13.0。 我能够创建菜单+内容布局,但我不知道添加子菜单部分的最佳实践。 我的应用程序如下所示:
Home ~ About ~ Contact ~ Profile

content...

我想在个人资料菜单项下添加一个子菜单,但前三个菜单项没有子菜单。因此,如果我点击关于和联系链接,则希望在主菜单栏下看到正确的内容。如果我点击个人资料链接,则需要显示一个子菜单。点击子菜单项后,内容需要显示在菜单+子菜单对下面:
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>
        );
    }
}

请问您能指导我正确的方向吗?

看一下这个:https://www.npmjs.com/package/react-nav-bar 可能会有用 - undefined
1个回答

5
你可以将当前路径作为属性传递给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>);
    }
}

谢谢,它运行得非常好。我只有一个小建议:{submenu}需要放在<div>元素之间:<div><div>mainmenu</div><div>{submenu}</div></div>。 - undefined
哦,是的,你说得对,我发帖有点太快了。我会更新答案的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接