Twitter bootstrap 如何在React Boostrap中制作工作导航条?
我第一次在web react应用程序中工作。我正在尝试实现一个Twitter bootstrap 如何在React Boostrap中制作工作导航条?,twitter-bootstrap,reactjs,Twitter Bootstrap,Reactjs,我第一次在web react应用程序中工作。我正在尝试实现一个NavBar,但在实现功能时遇到了一点麻烦,这就是我迄今为止所得到的(我使用回流来实现组件之间的通信): getInitialState:function(){ 返回{ 隐藏:[假,真], } }, 纳维加:功能(项目){ var tmp=[]; for(var i=0;i{ 如果(n==0){返回null;} 返回{option.title} })} {this.props.children} ); } }); ReactDOM.r
NavBar
,但在实现功能时遇到了一点麻烦,这就是我迄今为止所得到的(我使用回流来实现组件之间的通信):
getInitialState:function(){
返回{
隐藏:[假,真],
}
},
纳维加:功能(项目){
var tmp=[];
for(var i=0;i
问题是这种方法只适用于两个视图(两个NavBar
菜单选项),但我不知道如何使用多个选项实现我的NavBar
谢谢。首先,如果这是您的主要导航,我建议您使用路由库,如,而不是使用css隐藏和显示视图。其主要优点是,它使处理URL和内部链接变得更加容易。因此,使用路由库,您可以直接使用引导NavItems中的链接来路由应用程序 但是,我理解如果您不需要复杂的路由库,那么我继续您开始的工作,但做了一些更改
- 由于您希望在导航栏中提供的视图和选项的数量上具有灵活性,我认为最好的方法是使用Ids。这只是一个观点,但对我来说,这是一个更干净的方法,因为它增加了可读性。因此,我将
状态中的容器
数组替换为隐藏
状态,这也让我可以删除activeViewId
,从而使代码更简单navegar
- 在添加新视图和导航选项时,我不必同时更新
和容器
,而是将所有逻辑保留在一个位置。在这种情况下,逻辑位于NavBarComponent
容器中。因此,如果要添加新视图,请更新
,并将这些navOptions
与触发viewId
的ID相匹配hide
容器
组件添加任意多的视图和导航选项
如果您对答案有任何疑问,请告诉我
const RB=ReactBootstrap;
const Navbar=RB.Navbar;
const NavItem=RB.NavItem;
常量导航=常规导航;
var Container=React.createClass({
getInitialState:函数(){
返回{
activeViewId:“主视图”
}
},
导航器:功能(id){
这是我的国家({
activeViewId:id
});
},
render:function(){
常量导航选项=[
{标题:“品牌标题”,视图ID:“mainView”},
{标题:“第一个选项卡”,视图ID:“第一个选项卡视图”},
{标题:“第二个选项卡”,视图ID:“第二个选项卡视图”},
{标题:“Dietas Compatidas”,视图ID:“西班牙语选项卡视图”}
];
返回(
视图1
视图2
视图3
视图4
);
}
});
var NavBarComponent=React.createClass({
手柄选择:功能(选择键){
this.props.onClick(selectedKey);
},
默认道具:{
//退路
选项:[
{标题:“品牌标题”,视图ID:“mainView”}
]
},
render:function(){
返回(
{this.props.options[0].title}
{this.props.options.map((option,n)=>{
如果(n==0){返回null;}
返回{option.title}
})}
{this.props.children}
);
}
});
ReactDOM.render(
,
document.getElementById('app')
);代码>
。隐藏{
显示:无;
}
李{
列表样式类型:无;
}
getInitialState: function() {
return {
hide:[false,true],
}
},
navegar: function(item){
var tmp =[];
for (var i = 0; i < this.state.hide.length; i++) {
if (i == (item-1)){
tmp[i] = false;
}else{
tmp[i] = true;
}
}
this.setState({hide:tmp});
},
render: function() {
return (
<div>
<NavBarComponent onClick={this.navegar}/>
<ViewComponent1 className={this.state.hide[0] ? 'hidden' : ''}/>
<ViewComponent2 className={this.state.hide[1] ? 'hidden' : ''}/>
</div>
);
}
var NavBarComponent = React.createClass({
handleSelect: function(selectedKey) {
this.props.onClick(selectedKey);
},
render: function() {
return (
<div>
<Navbar fluid activeKey={1} >
<Navbar.Header>
<Navbar.Brand>
<NavItem eventKey={1} onSelect={this.handleSelect}>TITLE</NavItem>
</Navbar.Brand>
<Navbar.Toggle />
</Navbar.Header>
<Navbar.Collapse>
<Nav navbar onSelect={this.handleSelect}>
<NavItem eventKey={2}>First Tab</NavItem>
<NavItem eventKey={3}>Second Tab</NavItem>
<NavItem eventKey={4}>Dietas Compartidas</NavItem>
//Etc.....
</Nav>
</Navbar.Collapse>
</Navbar>
</div>);
}
});