我是新手做出反应并且一直试图找到一个如何在reactjs中创建侧导航栏并使用与它一起使用reactrouter的示例。现在,我有一个“侧面导航”窗格,如下所示:
import React, {PropTypes} from 'react';
import { Link, IndexLink } from 'react-router';
const Header = () => {
return (
<nav>
<div>
<ul>
<li>
<IndexLink to="/" activeClassName="active">Home</IndexLink>
</li>
<li>
<Link to="/courses" activeClassName="active">Courses</Link>
</li>
<li>
<Link to="/about" activeClassName="active">About</Link>
</li>
</ul>
</div>
</nav>
);
};
export default Header;
但是我想把它变成一个侧导航栏,但似乎无法在网上找到任何关于如何做到这一点的例子。
------- -------- EDIT
所以我尝试了这个,但仍然没有运气......
app.js看起来像这样:
// This component handles the App template used on every page.
import React, {PropTypes} from 'react';
import SideBar from './common/Header';
class App extends React.Component {
render() {
return (
<div className="container-fluid">
<SideBar />
{this.props.children}
</div>
);
}
}
App.propTypes = {
children: PropTypes.object.isRequired
};
export default App;
SideBar组件:
import React, {PropTypes} from 'react';
import { Link, IndexLink } from 'react-router';
const SideBar = () => {
return (
<nav>
<div>
<ul>
<li>
<IndexLink to="/" activeClassName="active">Home</IndexLink>
</li>
<li>
<Link to="/courses" activeClassName="active">Courses</Link>
</li>
<li>
<Link to="/about" activeClassName="active">About</Link>
</li>
</ul>
</div>
</nav>
);
};
export default SideBar;
style.css看起来像这样:
#app {
font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;
color: #4d4d4d;
min-width: 550px;
max-width: 850px;
margin: 0 auto;
}
a.active {
color: orange;
}
nav {
padding-top: 20px;
padding-bottom: 20px;
}
.container {
display: flex;
> * { height: 100%; }
.sidebar {
width: 250px;
}
.content {
width: 100%;
}
}
答案 0 :(得分:1)
这更像是一个CSS问题,而不是一个React问题 - 任何东西都可以成为一个带有正确CSS的侧边栏。也就是说,这也是在React中设置它的好方法,所以我会告诉你。
我建议你有以下内容,或接近。
路由器将按以下方式构建:
<Route path="/" component={WrapperComponent}/>
<Route path="/somepath" component={SomeComponent}/>
...
</Route>
WrapperComponent
看起来像
class WrapperComponent extends React.Component {
render() {
return (
<div>
<SideBar props... />
{ this.props.children }
</div>
)
}
}
你的SideBar
课程看起来或多或少与你上面的课程相同(但重命名,因为它很重要;)
这会自动将当前视图放在侧边栏旁边WrapperComponent
{ this.props.children }
所在的位置(假设您正确设置了样式)。在此示例中,导航到/something
会导致分割布局,左侧是侧边栏,右侧是SomeComponent
。
对于样式,类似
.container {
display: flex;
}
.container > * { height: 100%; }
.container .sidebar {
width: 250px;
}
.container .content {
width: 100%;
}
会让你接近。
编辑您使用的代码存在一些问题 - 即使您复制/粘贴我更新的样式:
.container-fluid
而不是我的样式使用的.container
。如果您使用的是Bootstrap,而不是display: flex
,只需使用自举列(即侧边栏上的col-md-3
和内容上的col-md-9
) - 或使用其他内容来避免Bootstrap冲突容器名称为.container(-fluid)
。SideBar
需要className
(.sidebar
)。 SideBar
只是组件类,对HTML类名没有任何影响。如果您更容易,可以将.sidebar
更改为nav
。{ this.props.children }
作为一个类包裹.content
或者确保正在呈现的任何内容都有该类。这可以通过接受潜在元素的className
道具来实现。