我从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,如果我删除它,我会得到另一个异常?那么我该怎样做呢?
答案 0 :(得分:5)
通过*.bind(null,this)
代替;
有关说明,请参阅this Google Groups thread。
答案 1 :(得分:2)
react会在方法调用时自动将方法绑定到此方法。
这很有用,因为它允许您直接传递函数。
所以要避免此消息,只需传递null
而不是this
。
参考:AutoBind
答案 2 :(得分:1)
就我而言,以前我有这个,
<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}/>
答案 3 :(得分:0)
删除&#34; content =&#34;或者创建一个包装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中使用根元素。
答案 4 :(得分:0)
从v0.4开始为你做反应autoBind。见https://facebook.github.io/react/blog/2013/07/02/react-v0-4-autobind-by-default.html所以你不需要绑定自己
答案 5 :(得分:0)
您应该了解bind
要达到的目标,我将在此解释。
首先,试着想一下谁会调用handleClick?即应该有一些像xxx.handleClick
,xxx
这样的代码真的很重要,因为当你在this.setState
内召唤handleClick
时,this
会引用xxx
, setState
仅存在于React component
,因此xxx
应引用component
来实现您的目标,这就是.bind(this)
到handleClick
的原因,为了在this
React Component
到handleClick
现在,回到我的第一个问题,如果你没有明确地设置this
,那么xxx
,在简单的javascript中,onClick
回调是全局的,这意味着没有xxx
,所以this
应该引用全局对象,即如果我是正确的话window
。但是React
以一种神奇的方式将xxx
设置为React Component
,这就是您不需要明确设置的原因