我正在尝试从渲染视图重构以下代码:
<;Button href=”“active={!this.state.singleTravelage}onClick={this.handleButtonChange.bind(this,false)}>;Retour</按钮>;
绑定在构造函数中的版本。原因是渲染视图中的绑定会给我带来性能问题,尤其是在低端手机上
我已经创建了以下代码,但是我经常会遇到以下错误(很多)。看起来应用程序进入了一个循环:
警告:设置状态(…):无法在现有状态转换期间更新(例如在'render'或其他组件的构造函数中)。渲染方法应该是道具和状态的纯函数;构造函数的副作用是一种反模式,但可以移动到“componentWillMount”。
下面是我使用的代码:
var React=require('React');
var ButtonGroup=require('react-bootstrap/lib/ButtonGroup');
var Button=require('react-bootstrap/lib/Button');
var Form=require('react-bootstrap/lib/Form');
var FormGroup=require('react-bootstrap/lib/FormGroup');
var Well=require('react-bootstrap/lib/Well');
导出默认类搜索扩展React.Component{
构造函数(){
超级();
此.state={
单程旅行:错误
};
this.handleButtonChange=this.handleButtonChange.bind(this);
}
把手按钮更改(值){
这是我的国家({
单程旅行:价值
});
}
render(){
返回(
<;表格>;
<;井式={wellStyle}>;
<;FormGroup className=“文本中心”>;
<;按钮组>;
<;Button href=”“active={!this.state.singleTravely}onClick={this.handleButtonChange(false)}>;Retour<;/Button>;
<;Button href=”“active={this.state.singleJourney}onClick={this.handleButtonChange(true)}>;singleJourney<;/Button>;
<;/ButtonGroup>;
<;/FormGroup>;
<;/Well>;
<;/Form>;
);
}
}
module.exports=搜索;
看起来您在渲染方法中意外调用了handleButtonChange方法,您可能希望改为执行onClick={()=>;this.handleButtonChange(false)}
如果不想在onClick处理程序中创建lambda,我认为需要有两个绑定方法,每个参数一个
在构造函数中:
this.handleButtonChangeRetour=this.handleButtonChange.bind(this,true);
this.handlebuttonchangesigne=this.handleButtonChange.bind(this,false);
在渲染方法中:
<;按钮href=”“active={!this.state.singleTravely}onClick={this.handleButtonChangeSingle}>;Retour</按钮>;
<;Button href=”“active={this.state.singleTravelage}onClick={this.handlebuttonChangeTour}>;单程旅行</按钮>;