У вас есть проблема с областью действия.
Давайте рассмотрим этот пример:
function foo() {
this.bar = 'lorem';
this.ipsum = function() {
console.log(this.bar);
};
}
Если вы позвоните ipsum
, он будет регистрировать undefined
, потому что this
там ссылаетсядо ipsum
function
.Давайте рассмотрим этот пример:
function foo() {
this.bar = 'lorem';
var that = this;
this.ipsum = function() {
console.log(that.bar);
};
}
В этом случае that
хранит внешний this
, поэтому 'lorem'
будет зарегистрирован, если вызывается ipsum
.Давайте рассмотрим пример функции стрелки:
function foo() {
this.bar = 'lorem';
this.ipsum = () => {
console.log(this.bar);
};
}
В этом случае при вызове ipsum
'lorem'
будет записано на консоль.
Вы также можете использовать для этой цели bind .
Давайте используем функцию стрелки для вашего примера:
$.post("requests.php", {
requestKey: 'newComment',
commenterUser: commenterUser,
commenterEmail: commenterEmail,
theComment: theComment,
pnum: pnum}, (data, status, xhr) => {
if(status == 'success'){
if(data == 'commented'){
this.setState({
comments: data
})
}else{
}
}
});