我正在尝试将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()}
             />

        )
    });
}

07-24 15:06