Javascript 从firebase接收数据
我正在试验React和firebase。我有一个函数,当加载组件时,将读取数据库。连接正常,我收到了数据。但是,它们是对象,我想将它们结构化地放在一个数组中,稍后将读出。我只得到当前代码的错误: TypeError:无法读取属性“title”或未定义 有人知道我如何确保从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
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)