我正在尝试将returend参数从firebase传递给状态参数,但出现此错误:
App.js:43 Uncaught TypeError: Cannot read property 'setState' of null
我想将“快照”数组传递给“日历”,然后检索日历值,例如“ calendars.summary”或“ calendars.date”(我知道该怎么做,但是问题是我无法将快照分配给日历)。
componentDidMount() {
//setInterval(() => start(this.state.gapi,true), 30000);
var rootRef = firebase.database().ref();
var urlRef = rootRef.child("testCalendar/calendars");
urlRef.once("value", function(snapshot) {
snapshot.forEach(function(child) {
console.log(child.key+": "+child.child("summary").val());
});
this.setState({
calendars: snapshot
});
});
}
我该如何解决?谢谢
更新
在Mayank Shukla发表评论后,我可以通过以下方式正确传递“快照”:
componentDidMount() {
//setInterval(() => start(this.state.gapi,true), 30000);
var rootRef = firebase.database().ref();
var urlRef = rootRef.child("testCalendar/calendars");
urlRef.once("value", function(snapshot) {
snapshot.forEach(function(child) {
console.log(child.key+": "+child.child("summary").val());
});
this.setState({
calendars: snapshot
});
}.bind(this));
}
要么
componentDidMount() {
//setInterval(() => start(this.state.gapi,true), 30000);
var rootRef = firebase.database().ref();
var urlRef = rootRef.child("testCalendar/calendars");
urlRef.once("value", (snapshot) => {
snapshot.forEach(function(child) {
console.log(child.key+": "+child.child("summary").val());
});
this.setState({
calendars: snapshot
});
});
}
但是现在我有这个问题:
Uncaught TypeError: this.state.calendars.map is not a function
关于此功能:
_getCalendarsList(){
var d = new Date();
return this.state.calendars.map((calend) => {
return (
<Calendar
{...calend}
key={d.getTime()} />
)
});
}
最佳答案
要在任何变量上使用map
,该变量必须为array
,您正在使用componentDidMount
方法获取数据,因此在初始渲染后将调用该数据,因此请确保在状态应为calendars
,如下所示:
constructor(){
super();
this.state = {
calendars: [],
....
}
}
或者在使用
[]
之前进行检查,如果不是map
,则使用array
,如下所示:_getCalendarsList(){
if(!Array.isArray(this.state.calendars))
return null;
var d = new Date();
return this.state.calendars.map((calend) => {
return (
<Calendar
{...calend}
key={d.getTime()}
/>
)
});
}