我正在学习React初学者教程,并试图将其翻译成ES6。但是,当我将CommentBox
更改为ES6类时,它开始给我一个this.props.url
是未定义的
错误(在
loadCommentsFromServer
中的AJAX调用中)。我认为这与ES6如何绑定this
有关,但我对这门语言不太熟悉(也不太熟悉),所以我不确定。我查看了React 0.13发行说明,看到了以下内容:
React.createClass有一个内置的神奇功能,可以为您自动将所有方法绑定到
this
。对于其他类中不习惯此功能的JavaScript开发人员来说,这可能有点让人困惑,或者当他们从React移动到其他类时,这可能会让人困惑。
我不太确定,但我认为这意味着我必须保存这个的值(如
let that=this
和. bind(that)
),但这也给了相同的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>
);
}
};
这是特定于作为ES6类实现的React.Component
的行为。使用ES5样式时,React组件自动绑定其所有功能。使用ES6类样式时,自动绑定的唯一方法是React.Component
(render
,componentDidMount
等)中专门包含的方法。
这实际上在文档中提到过,尽管很容易忽略。
别难过;我知道它在文档中,因为我第一次将一些可用的React组件移植到ES6类时,就不得不去寻找它。
在诸如success和error之类的回调函数中,作用域会发生变化,因此“this”不再是CommentBox。
你需要做一些事情,比如:
handleCommentSubmit(comment) {
var comments = this.state.data;
var newComments = comments.concat([comment]);
this.setState({ data: newComments });
var comment_box = this;
$.ajax({
url: this.props.url,
dataType: 'json',
type: 'POST',
data: comment,
success: function(data) {
comment_box.setState({ data: data });
},
error: function(xhr, status, err) {
console.error(comment_box.props.url, status, err.toString());
}.bind(this)
});
}
将此应用于代码中的其他适用位置
你需要使用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-自动绑定
没有自动绑定方法遵循与常规ES6类相同的语义学,这意味着它们不会自动将其绑定到实例。您必须显式地使用. bind(this)或箭头函数=
试图从GET服务获取响应时,ajax函数总是运行在错误部分。 当浏览器执行代码时,我得到了这个结果: 数据:[对象] 我尝试了dataType:"json",但我得到了这个错误在chrome调试控制台: 请求的资源上没有访问-控制-允许-起源标头。因此,不允许访问源'null'。 并打印警报: data:[对象对象] 文本状态:错误 jqXHR:错误: ****编辑**** 我用这个chrome应
涵义 this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。 前一章已经提到,this可以用在构造函数之中,表示实例对象。除此之外,this还可以用在别的场合。但不管是什么场合,this都有一个共同点:它总是返回一个对象。 简单说,this就是属性或方法“当前”所在的对象。 this.property 上面代码中,this就代表property属性当前所在
本文向大家介绍node.js+Ajax实现获取HTTP服务器返回数据,包括了node.js+Ajax实现获取HTTP服务器返回数据的使用技巧和注意事项,需要的朋友参考一下 我们看一个HTML5页面中通过AJAX请求的方式获取HTTP服务器返回数据的代码示例.由于我们把服务器的端口指定为1337,并将从端口为80的网站中运行HTML5页面,因此这是一种跨域操作,需要在HTTP响应头部中添加Acces
在 C# 中,可以使用 this 关键字来表示当前对象,日常开发中我们可以使用 this 关键字来访问类中的成员属性以及函数。不仅如此 this 关键字还有一些其它的用法,下面就通过一些示例来分别演示一下。 1) 使用 this 表示当前类的对象 运行结果如下: 小牛知识库 https://www.xnip.cn/ 2) 使用 this 关键字串联构造函数 运行结果如下: 无参构造函数 小牛知识库
主要内容:this.属性名,this.方法名,this( )访问构造方法this 关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。 下面我们根据示例分别讲解 this 关键字的作用。 this.属性名 大部分时候,普通方法访问其他方法、成员变量时无须使用 this 前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用 this 前缀
我有以下电话: 和以下路线: 我试图在'//get Hello'上获取名为'Hello'的参数。我尝试使用req.params,但它返回{}。 调用是否有问题,或者如何获取hello参数?提前谢谢