javascript – ES6 /用ajax反复“this”关键字从服务器获取数据(教程)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – ES6 /用ajax反复“this”关键字从服务器获取数据(教程),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2171字,纯文字阅读大概需要4分钟。
内容图文
参见英文答案 > Unable to access React instance (this) inside event handler 16个
我正在关注React Beginner Tutorial,我正试图将其翻译成ES6.但是,当我将CommentBox更改为ES6类时,它开始给我一个this.props.url是未定义的错误(在loadCommentsFromServer的AJAX调用中).我认为这与ES6如何绑定它有关,但是我对语言(也不是React)不太熟悉,所以我不确定.我看了React 0.13 release notes,看到了这个:
React.createClass has a built-in magic feature that bound all methods to
this
automatically for you. This can be a little confusing for JavaScript developers that are not used to this feature in other classes, or it can be confusing when they move from React to other classes.
我不完全确定,但我认为这意味着我必须保存这个值(就像在那个= this和.bind(那))但是也给了相同的this.props.url是未定义的 – 我’我不知道下一步该去哪里.
这是我目前的代码:
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>
);
}
};
解决方法:
您需要使用bind(this)绑定事件.如下:
componentDidMount() {
this.loadCommentsFromServer().bind(this);
setInterval(this.loadCommentsFromServer.bind(this), this.props.pollInterval);
}
您可以从此链接中读取参考:
https://facebook.github.io/react/docs/reusable-components.html#no-autobinding
没有自动绑定
方法遵循与常规ES6类相同的语义,这意味着它们不会自动将其绑定到实例.您必须明确使用.bind(this)或arrow functions =>.
内容总结
以上是互联网集市为您收集整理的javascript – ES6 /用ajax反复“this”关键字从服务器获取数据(教程)全部内容,希望文章能够帮你解决javascript – ES6 /用ajax反复“this”关键字从服务器获取数据(教程)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。