如何在React Router中正确使用IndexRoute?

时间:2016-06-28 18:52:36

标签: javascript reactjs ecmascript-6 react-router

我正在使用React作为一个小型网络应用程序。它有一个基本的5页网站布局。 (主页|关于|联系|按|显示)所以我想使用只显示菜单,页眉和页脚的应用程序模板,而{props.children}将是React Router的路径组件。为此,我使用了以下代码。假设所有进口都在那里......

这是我的路由器代码:

export default (props) => {
    return (
        <Router history={ hashHistory }>
            <Route path="/" component={ Template }>
                <IndexRoute component={ Home }></IndexRoute>
                <Route path="about"   component={ About }></Route>
                <Route path="music"   component={ Music }></Route>
                <Route path="store"   component={ Store }></Route>
                <Route path="shows"   component={ Shows }></Route>
                <Route path="contact" component={ Contact }></Route>
            </Route>
        </Router>
    );
}

现在这是我的模板:

export default ( props ) => {
    return (
        <div className="container">
            <Header />
            <Menu />
            { props.children }
            <Footer />
        </div>
    );
}

我知道出了什么问题,b / c没有CSS魔术,a:主动总是在HOME和任何其他活动页面。 I.E.如果我单击关于,则Home和About都处于活动状态。我怎样才能正确使用索引路由,或者我是否应该在这个简单的应用程序中使用索引路由?如果没有,那么我怎样才能使用我所拥有的模板,并以不同的方式将页面作为组件传递?

更新:这是我的Menu.js文件......

const Menu = () => {
    return (
        <div>
          <nav>
            <Link activeClassName="nav-active" to="/">Home</Link>
            <Link activeClassName="nav-active" to="about">About</Link>
            <Link activeClassName="nav-active" to="music">Music</Link>
            <Link activeClassName="nav-active" to="shows">Shows</Link>
            <Link activeClassName="nav-active" to="store">Store</Link>
            <Link activeClassName="nav-active" to="contact">Contact</Link>
          </nav>
          <hr className="line" />
        </div>
    );
}

export default Menu;

1 个答案:

答案 0 :(得分:8)

对于索引路线,您应该使用IndexLink comp,否则&#39; Home&#39;将永远活跃

import {Link,IndexLink} from 'react-router';

<IndexLink activeClassName="nav-active" to="/">Home</IndexLink>
<Link activeClassName="nav-active" to="about">About</Link>
<Link activeClassName="nav-active" to="music">Music</Link>
 ...