Я читаю руководство по стилю javascript air-bnb, в котором говорится, что этого делать не следует:
23.5 Не сохраняйте ссылки на это. Используйте функции стрелок или функцию # связать.
// bad
function foo() {
const self = this;
return function () {
console.log(self);
};
}
// bad
function foo() {
const that = this;
return function () {
console.log(that);
};
}
// good
function foo() {
return () => {
console.log(this);
};
}
Я уже провел некоторое исследование и нашел здесь два ответа в stackoverflow, но в одном из них был принят ответ, что этого нельзя обойти:
ES6 избегать этого / self
, а другой предлагает использовать связывание, но он предложил использовать функцию генератора.
Вложенная ссылка на `this` в классах ES6
Я создаю приложение ReactJS, и мне нужно получить доступ к setState из Promise в Firebase.
saveSessionToDB = () => {
const that = this;
db.collection("sessions")
.add({
props: MyProps
})
.then(function(docRef) {
console.log("Session written with ID: ", docRef.id);
that.setState({ sessionID: docRef.id });
})
.catch(function(error) {
console.error("Error adding document: ", error);
that.setState({ sessionError: error });
});
}
Я пытался
const {setState} = this;
, а затем
setState({sessionID:docRef.id});
но я получаю ошибку.
Я пытался привязать saveSessionToDB в конструкторе безрезультатно, даже если это функция стрелки.
Есть ли другой способ сделать это, или я должен просто признать, что иногда мне все равно придется писать const, что = this?