我从reactJS.NET 收到此警告
bind():您正在将一个组件方法绑定到该组件。反应以高性能的方式自动为您执行此操作,因此您可以安全地删除此调用。参见LikeCon
组件看起来像这个
var LikeCon = React.createClass({
handleClick: function() {
var data = new FormData();
var like = !this.state.like;
var likeCounter = this.state.likeCount;
data.append("catgoryType", this.state.categoryKey);
data.append("objectId", this.state.objectId);
data.append("like", like);
if(like)
likeCounter++;
else
likeCounter--;
this.setState({ like: like, likeCount: likeCounter, userId: this.state.userId, categoryKey: this.state.categoryKey, objectId: this.state.objectId});
var xhr = new XMLHttpRequest();
xhr.open("post", "http://localhost:2215/Home/SetLike", true);
xhr.onload = function() {
};
xhr.send(data);
},
getInitialState: function() {
return { like: this.props.initialLike, likeCount: this.props.initialLikeCount, userId: this.props.userId, categoryKey: this.props.categoryKey, objectId: this.props.objectId };
},
render(){
return this.renderLikeButton()
},
renderLikeButton(){
return (
content =
<div className="likeCon">
<div className={this.state.like==true ? "likeButConAct" : "likeButCon"}>
<div className="likeB" title={this.state.like==true ? "Unlike" : "Like"} onClick={this.handleClick.bind(this)} >
</div>
{ this.state.likeCount > 0 ? <div className="likeCount">{this.state.likeCount}</div>: null}
</div>
</div>
);
}
})
我在调用handleClick方法时使用了绑定,如果我删除它,我会得到另一个异常吗?那我该怎么办呢?
改为传递*.bind(null,this)
;
有关解释,请参阅此Google群组线程。
react会在方法调用时自动将方法绑定到此。这很有帮助,因为它允许您直接传递函数。因此为了避免该消息只通过CCD_ 2而不是CCD_。参考:自动绑定
在我的情况下,以前我有
<input placeholder="URL" id="txt_url" className="form-control"
value={this.state.url} onChange={this.handleChange.bind(this)}/>
删除.bind
调用解决了
<input placeholder="URL" id="txt_url" className="form-control"
value={this.state.url} onChange={this.handleChange}/>
删除"content="或创建包装div:
<div> content =
<div className="likeCon">
<div className={this.state.like==true ? "likeButConAct" : "likeButCon"}>
<div className="likeB" title={this.state.like==true ? "Unlike" : "Like"} onClick={this.handleClick.bind(this)} >
</div>
{ this.state.likeCount > 0 ? <div className="likeCount">{this.state.likeCount}</div>: null}
</div>
</div>
</div>
在返回的HTML中需要一个根元素。
由于v0.4 React autoBind为您提供。看见https://facebook.github.io/react/blog/2013/07/02/react-v0-4-autobind-by-default.html所以你不需要绑定你自己的
您应该了解bind
的目标,我将在这里进行解释。
首先,试着想想谁会调用handleClick?也就是说,应该有一些像xxx.handleClick
、xxx
这样的代码真的很重要,因为当你在handleClick
中调用this.setState
时,this
指的是xxx
,而setState
只存在于React component
中,所以xxx
应该指component
来实现你想要的,这就是为什么.bind(this)
到handleClick
,以便在null
0 中设置this
到React Component
现在,回到我的第一个问题,如果你没有明确地设置this
,什么是xxx
,在简单的javascript中,onClick
回调是全局的,这意味着没有xxx
,所以如果我是正确的,this
应该引用全局对象,即window
。然而,React
以一种神奇的方式将xxx
设置为React Component
,这就是为什么您不需要显式地将其设置为