【发布时间】:2015-12-20 04:46:10
【问题描述】:
我正在关注React Beginner Tutorial,我正在尝试将其翻译成 ES6。但是,当我将 CommentBox 更改为 ES6 类时,它开始给我一个 this.props.url 是 undefined 错误(在 loadCommentsFromServer 的 AJAX 调用中)。我认为这与 ES6 绑定 this 的方式有关,但是我对这种语言(也不是 React)不太熟悉,所以我不确定。我查看了React 0.13 release notes 并看到了这个:
React.createClass 有一个内置的魔法特性,可以自动为你将所有方法绑定到
this。对于不习惯在其他类中使用此功能的 JavaScript 开发人员来说,这可能会有些混乱,或者当他们从 React 转移到其他类时可能会感到困惑。
我不太确定,但我认为这意味着我必须保存它的值(如let that = this 和.bind(that)),但这也给出了相同的this.props.url 是undefined - 我'我不知道下一步该去哪里。
这是我当前的代码:
class CommentBox extends React.Component {
constructor(props) {
super(props);
this.state = {
data: []
};
}
loadCommentsFromServer() {
$.ajax({
url: this.props.url,
dataType: 'json',
cache: false,
success: function(data) {
this.setState({
data: data
})
}.bind(this)
});
}
handleCommentSubmit(comment) {
var comments = this.state.data;
var newComments = comments.concat([comment]);
this.setState({ data: newComments });
$.ajax({
url: this.props.url,
dataType: 'json',
type: 'POST',
data: comment,
success: function(data) {
this.setState({ data: data });
},
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
}
componentDidMount() {
this.loadCommentsFromServer();
setInterval(this.loadCommentsFromServer, this.props.pollInterval);
}
render() {
return (
<div className="commentBox">
<h1>Comments</h1>
<CommentList data={this.state.data}/>
<CommentForm onCommentSubmit={this.handleCommentSubmit}/>
</div>
);
}
};
【问题讨论】:
标签: javascript class reactjs this ecmascript-6