我在Firebase中有一个模型,保存方式如下:
我在componentDidMount中获取数据,如下所示:
fetchMatches = async () => {
const { firebaseApp, auth, pool } = this.props;
await firebaseApp.database()
.ref(`/pools/${pool.key}/users/${auth.uid}/`)
.once('value')
.then(snapshot =>{
this.setState({matches:snapshot.val()})
})
}
问题是,我的状态成为一个对象:不是数组,不是列表。
如何以正确的方式读取此数据,我可以根据属性过滤它。
当我尝试
时let matches = this.state.matches;
for (let index = 0; index < matches.length; index++) {
const element = matches[index];
console.log(element);
}
不行。
当我尝试使用this.state.matches.map()时,他们说这不是一个函数。它真的不像我的调试器this.state.matches是一个OBJECT。
我在这里做错了什么?
答案 0 :(得分:0)
当您使用once函数获取数据时,它返回该特定ref的对象,在这种情况下,它将返回此$ {auth.uid}数据作为对象。
所以你可能想把你的ref改成一点:ref(/pools/${pool.key}/users/${auth.uid}/matches
),
然后根据firebase文档https://firebase.google.com/docs/database/web/lists-of-data#listen_for_value_events
await firebaseApp.database()
.ref(`/pools/${pool.key}/users/${auth.uid}/matches`)
.once('value')
.then(snapshot =>{
snapshot.forEach(function(childSnapshot) {
var childKey = childSnapshot.key;
var childData = childSnapshot.val();
// ...
});
})