我具有以下功能,可将我的应用程序状态保存到Firebase参考:
saveResultsToDatabase() {
const {
companyName, companyUrl, productName, goals, industries,
ageRanges, gender, other, weightedScores, goalScores, industryScores, ageScores, recommendation,
email, phone, optin
} = this.state
const databaseObject = {
companyName, companyUrl, productName, goals, industries,
ageRanges, gender, other, weightedScores, goalScores, industryScores, ageScores, recommendation,
email, phone, optin
}
contactRef.push().set((databaseObject), function(error) {
if (error) {
console.log(error)
} else {
this.setState({savedToDatabase: true})
}
})
我想在Firebase成功执行后以我的状态更新“ savedToDatabase”对象。但是,这不起作用。我收到以下错误:
TypeError: Cannot read property 'setState' of undefined
我在这里想念什么?
答案 0 :(得分:1)
用于Firebase操作function() {}
的回调的this
内部与该组件的this
不同。一种选择是改为使用箭头函数绑定到此上下文。
您可以在此处了解更多信息:https://hackernoon.com/javascript-es6-arrow-functions-and-lexical-this-f2a3e2a5e8c4
例如
contactRef.push().set((databaseObject),(error) => {
// do something
this.setState({})
}
这应该有效。
您之前可能见过的另一种选择是使用var self = this
方法
var self = this;
contactRef.push().set((databaseObject), function(error) {
// do something
self.setState({})
}