在 Reactjs 中使用 Bootstrap 个组件
Using Bootstrap Components with Reactjs
我有一个使用 Bootstrap 在 Symfony 框架上构建的社交网站。我阅读了 React.js,现在我使用它来编写视图部分。我有几个问题。
1) 可以直接使用bootstrap组件吗?例如-
var NavbarLeftMenuBar=React.createClass({
render: function() {
return(<ul className="nav navbar-nav">
<li><a data-toggle="modal" href="#myModal" id="help">Help</a></li>
<li> <a href="" className="dropdown-toggle" data-toggle="dropdown">Menu <b className="caret"></b></a>
<ul className="dropdown-menu">
<li><a href="">Menu1</a></li>
<li><a href="">Menu2 </a></li>
<li><a href="">Menu3 </a></li>
<li><a href="">Menu4 </a></li>
</ul>
</li>
</ul>);
}
});
var NavbarSearchBar=React.createClass({
render: function() {
var buttonStyle={ marginLeft:-20,borderLeft:0 };
var ulStyle={marginLeft:-20,marginTop:12};
return <form className="navbar-form navbar-left" id="search" role="search">
<div className="form-group">
<input type="text" className="form-control" placeholder="Search" value="{%if query is defined%}{{query}}{%endif%}"/>
<input type="hidden" value="{%if searchin is defined%}{{searchin}}{%else%}1{%endif%}" id="searchin"/>
</div>
<span className="dropdown">
<button style={buttonStyle} type="button" className="btn btn-white dropdown-toggle text-info-all" data-toggle="dropdown"><span data-bind="label" className="{%if searchin is not defined%}fa fa-users {%elseif searchin==1%}fa fa-users{%else%} fa fa-bell-o{%endif%}"></span> <span className="caret"></span></button>
<ul style={ulStyle} className="dropdown-menu">
<li data-search="1"><a href="#"><span className="fa fa-users"></span> Search for Users</a></li>
<li data-search="2"><a href="#"><span className="fa fa-bell-o"></span> Search in Status</a></li>
</ul>
</span>
<button type="submit" className="btn btn-default" id="searchbutton">Submit</button>
</form>;
}
});
var Navbar = React.createClass({
render: function() {
return(<nav className="navbar navbar-default navbar-fixed-top" role="navigation">
<div className="container">
<div className="navbar-header">
<a className="navbar-brand" href="{{path('homepage')}}">Brand Name</a>
</div>
<NavbarLeftMenuBar/>
<NavbarSearchBar/>
</div>
</nav>);
}
});
下拉菜单使用此代码可以完美工作,但这是在 React 中使用 bootstrap 组件的正确方法吗?
2) 使用反应-bootstrap
我也试过使用 React-bootstrap 。我在使用它时遇到了几个问题。
由于我必须在导航栏中显示搜索栏,因此我必须使用状态进行搜索。此外,导航栏中的菜单将根据行为进行更新。使用 React.createClass 无效。
var NavbarLeftMenuBar=React.createClass({
render: function() {
return <Nav>
<NavItem eventKey={1} href='#'>Help</NavItem>
<DropdownButton eventKey={2} title='Dropdown'>
<MenuItem eventKey='1' href=''>Home</MenuItem>
<MenuItem eventKey='2' href=''>LInk2</MenuItem>
<MenuItem eventKey='3' href=''>Link3</MenuItem>
<MenuItem eventKey='4' href=''>Link4</MenuItem>
</DropdownButton>
</Nav>;
}
});
var NavbarSearchBar=React.createClass({
render: function() {
var buttonStyle={ marginLeft:-20,borderLeft:0 };
var ulStyle={marginLeft:-20,marginTop:12};
return <form className="navbar-form navbar-left" id="search" role="search">
<div className="form-group">
<input type="text" className="form-control" placeholder="Search" value="{%if query is defined%}{{query}}{%endif%}"/>
<input type="hidden" value="{%if searchin is defined%}{{searchin}}{%else%}1{%endif%}" id="searchin"/>
</div>
<span className="dropdown">
<button style={buttonStyle} type="button" className="btn btn-white dropdown-toggle text-info-all" data-toggle="dropdown"><span data-bind="label" className="{%if searchin is not defined%}fa fa-users {%elseif searchin==1%}fa fa-users{%else%} fa fa-bell-o{%endif%}"></span> <span className="caret"></span></button>
<ul style={ulStyle} className="dropdown-menu">
<li data-search="1"><a href="#"><span className="fa fa-users"></span> Search for Users</a></li>
<li data-search="2"><a href="#"><span className="fa fa-bell-o"></span> Search in Status</a></li>
</ul>
</span>
<button type="submit" className="btn btn-default" id="searchbutton">Submit</button>
</form>;
}
});
var NavbarWindow =React.createClass({
render:function() {
return <Navbar brand={<a href="{{path('homepage')}}">Brand name</a>}>
<NavbarLeftMenuBar/>
<NavbarSearchBar/>
</Navbar>;
}
});
这无法正确呈现 css。我不能只使用 const varname=(code);因为菜单栏数据会改变,我必须处理用户在搜索栏中输入的数据。有时,我什至会收到错误 Maximum call stack size exceeded error.
使用 React-bootstrap 的最佳方式是什么?我应该使用它还是直接使用 bootstrap 组件?还有其他解决方案吗?
在您的情况下,因为您只是在脚本标记中创建组件,所以使用 bootstrap class 名称而不使用 react-bootstrap 包就可以了。没有错误或正确的方法。
使用 react-boostrap 很好,因为它使您的代码更加模块化,并且您不必处理不断变化的样式,因为一切都依赖于您传递给组件的状态和道具。
我有一个使用 Bootstrap 在 Symfony 框架上构建的社交网站。我阅读了 React.js,现在我使用它来编写视图部分。我有几个问题。
1) 可以直接使用bootstrap组件吗?例如-
var NavbarLeftMenuBar=React.createClass({
render: function() {
return(<ul className="nav navbar-nav">
<li><a data-toggle="modal" href="#myModal" id="help">Help</a></li>
<li> <a href="" className="dropdown-toggle" data-toggle="dropdown">Menu <b className="caret"></b></a>
<ul className="dropdown-menu">
<li><a href="">Menu1</a></li>
<li><a href="">Menu2 </a></li>
<li><a href="">Menu3 </a></li>
<li><a href="">Menu4 </a></li>
</ul>
</li>
</ul>);
}
});
var NavbarSearchBar=React.createClass({
render: function() {
var buttonStyle={ marginLeft:-20,borderLeft:0 };
var ulStyle={marginLeft:-20,marginTop:12};
return <form className="navbar-form navbar-left" id="search" role="search">
<div className="form-group">
<input type="text" className="form-control" placeholder="Search" value="{%if query is defined%}{{query}}{%endif%}"/>
<input type="hidden" value="{%if searchin is defined%}{{searchin}}{%else%}1{%endif%}" id="searchin"/>
</div>
<span className="dropdown">
<button style={buttonStyle} type="button" className="btn btn-white dropdown-toggle text-info-all" data-toggle="dropdown"><span data-bind="label" className="{%if searchin is not defined%}fa fa-users {%elseif searchin==1%}fa fa-users{%else%} fa fa-bell-o{%endif%}"></span> <span className="caret"></span></button>
<ul style={ulStyle} className="dropdown-menu">
<li data-search="1"><a href="#"><span className="fa fa-users"></span> Search for Users</a></li>
<li data-search="2"><a href="#"><span className="fa fa-bell-o"></span> Search in Status</a></li>
</ul>
</span>
<button type="submit" className="btn btn-default" id="searchbutton">Submit</button>
</form>;
}
});
var Navbar = React.createClass({
render: function() {
return(<nav className="navbar navbar-default navbar-fixed-top" role="navigation">
<div className="container">
<div className="navbar-header">
<a className="navbar-brand" href="{{path('homepage')}}">Brand Name</a>
</div>
<NavbarLeftMenuBar/>
<NavbarSearchBar/>
</div>
</nav>);
}
});
下拉菜单使用此代码可以完美工作,但这是在 React 中使用 bootstrap 组件的正确方法吗?
2) 使用反应-bootstrap
我也试过使用 React-bootstrap 。我在使用它时遇到了几个问题。 由于我必须在导航栏中显示搜索栏,因此我必须使用状态进行搜索。此外,导航栏中的菜单将根据行为进行更新。使用 React.createClass 无效。
var NavbarLeftMenuBar=React.createClass({
render: function() {
return <Nav>
<NavItem eventKey={1} href='#'>Help</NavItem>
<DropdownButton eventKey={2} title='Dropdown'>
<MenuItem eventKey='1' href=''>Home</MenuItem>
<MenuItem eventKey='2' href=''>LInk2</MenuItem>
<MenuItem eventKey='3' href=''>Link3</MenuItem>
<MenuItem eventKey='4' href=''>Link4</MenuItem>
</DropdownButton>
</Nav>;
}
});
var NavbarSearchBar=React.createClass({
render: function() {
var buttonStyle={ marginLeft:-20,borderLeft:0 };
var ulStyle={marginLeft:-20,marginTop:12};
return <form className="navbar-form navbar-left" id="search" role="search">
<div className="form-group">
<input type="text" className="form-control" placeholder="Search" value="{%if query is defined%}{{query}}{%endif%}"/>
<input type="hidden" value="{%if searchin is defined%}{{searchin}}{%else%}1{%endif%}" id="searchin"/>
</div>
<span className="dropdown">
<button style={buttonStyle} type="button" className="btn btn-white dropdown-toggle text-info-all" data-toggle="dropdown"><span data-bind="label" className="{%if searchin is not defined%}fa fa-users {%elseif searchin==1%}fa fa-users{%else%} fa fa-bell-o{%endif%}"></span> <span className="caret"></span></button>
<ul style={ulStyle} className="dropdown-menu">
<li data-search="1"><a href="#"><span className="fa fa-users"></span> Search for Users</a></li>
<li data-search="2"><a href="#"><span className="fa fa-bell-o"></span> Search in Status</a></li>
</ul>
</span>
<button type="submit" className="btn btn-default" id="searchbutton">Submit</button>
</form>;
}
});
var NavbarWindow =React.createClass({
render:function() {
return <Navbar brand={<a href="{{path('homepage')}}">Brand name</a>}>
<NavbarLeftMenuBar/>
<NavbarSearchBar/>
</Navbar>;
}
});
这无法正确呈现 css。我不能只使用 const varname=(code);因为菜单栏数据会改变,我必须处理用户在搜索栏中输入的数据。有时,我什至会收到错误 Maximum call stack size exceeded error.
使用 React-bootstrap 的最佳方式是什么?我应该使用它还是直接使用 bootstrap 组件?还有其他解决方案吗?
在您的情况下,因为您只是在脚本标记中创建组件,所以使用 bootstrap class 名称而不使用 react-bootstrap 包就可以了。没有错误或正确的方法。
使用 react-boostrap 很好,因为它使您的代码更加模块化,并且您不必处理不断变化的样式,因为一切都依赖于您传递给组件的状态和道具。