Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从firebase接收数据_Javascript_Arrays_Reactjs_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 从firebase接收数据

Javascript 从firebase接收数据,javascript,arrays,reactjs,firebase,firebase-realtime-database,Javascript,Arrays,Reactjs,Firebase,Firebase Realtime Database,我正在试验React和firebase。我有一个函数,当加载组件时,将读取数据库。连接正常,我收到了数据。但是,它们是对象,我想将它们结构化地放在一个数组中,稍后将读出。我只得到当前代码的错误: TypeError:无法读取属性“title”或未定义 有人知道我如何确保从Firebase收到的数据: 数据库: 使用此代码: const newEvents = []; useEffect(() => { let ref = Firebase.database().ref('/e

我正在试验React和firebase。我有一个函数,当加载组件时,将读取数据库。连接正常,我收到了数据。但是,它们是对象,我想将它们结构化地放在一个数组中,稍后将读出。我只得到当前代码的错误: TypeError:无法读取属性“title”或未定义

有人知道我如何确保从Firebase收到的数据:

数据库:

使用此代码:

const newEvents = [];

useEffect(() => {
    let ref = Firebase.database().ref('/events');
    ref.on('value' , snapshot => {
        var state = snapshot.val();
        let arrayCount = loopStateEvents(state);
        console.log(state);

        for(var i = 0; i < arrayCount; i++){

            newEvents.push({title: state[i].title, id: state[i].id, resourceId: state[i].resourceId,start: new Date(state[i].yearStart,state[i].monthStart,state[i].dayStart,state[i].hourStart,state[i].minuteStart,state[i].secondStart),end: new Date(state[i].yearStart,state[i].monthStart,state[i].dayStart,state[i].hourEnd,state[i].minuteEnd,state[i].secondEnd)});
            //setEventDb([...eventDb,{title: state[i].title, id: state[i].id, resourceId: state[i].resourceId,start: new Date(state[i].yearStart,state[i].monthStart,state[i].dayStart,state[i].hourStart,state[i].minuteStart,state[i].secondStart),end: new Date(state[i].yearStart,state[i].monthStart,state[i].dayStart,state[i].hourEnd,state[i].minuteEnd,state[i].secondEnd)}]);
        }


    });
},[] );

const loopStateEvents = function(object){
   var length = 0;
  for( var key in object ) {
      if( object.hasOwnProperty(key) ) {
          ++length;
      }
  }
  return length;
}
请执行以下操作:

let ref = Firebase.database().ref('/events');
    ref.on('value' , snapshot => {
        snapshot.forEach((childSnap) => {
        let state = childSnap.val());
        console.log(childSnap);
            newEvents.push({title: state.title, id: state.id, resourceId: state.resourceId,start: new Date(state.yearStart,state.monthStart,state.dayStart,state.hourStart,state.minuteStart,state.secondStart),end: new Date(state.yearStart,state.monthStart,state.dayStart,state.hourEnd,state.minuteEnd,state.secondEnd)});          
    });
使用
forEach
在数组内迭代,然后使用
childSnap
使用点表示法访问属性

useEffect(() => {
    let ref = Firebase.database().ref('/events');
    ref.on('value' , snapshot => {
        var state = snapshot.val();
        let events = []
        for (var key in state) {
          events.push(state[key]);
        }
    });
},[] );
使用
for(var key in state)
可以直接使用从firebase返回的对象并推入事件数组,而不需要对象的长度。 您可以通过以下方式添加自定义属性:

state[key].start = new Date(state[key].yearStart,state[key].monthStart,state[key].dayStart,state[key].hourStart,state[key].minuteStart,state[key].secondStart)
state[key].start = new Date(state[key].yearStart,state[key].monthStart,state[key].dayStart,state[key].hourStart,state[key].minuteStart,state[key].secondStart)