我试图查询我的数据库,以便它根据每个子键检索一个有序列表。我这样做(见下文),但是" TypeError"发生。使用.on('value', snapshot =>
时,这是随机排序的。我无法解决这个问题,你们有什么想法可以实现吗?
TypeError:在此环境中,assign的源必须是一个对象。此错误是性能优化,不符合规范。
export const messagesFetch = (room) => {
return (dispatch) => {
firebase.database().ref(`/rooms/${room.roomId}/messages`)
.once('child_added', snapshot => {
dispatch({ type: 'messages_fetch_success', payload: snapshot.val() });
})
};
};

答案 0 :(得分:0)
child_added
将为每条消息创建一个新快照,而不是在一个对象中返回消息列表。
您可能希望查看.once('value')
而不是once('child_added')
。
如果您想要一个有序列表,我添加了查询orderByKey()
,它将按键顺序返回消息。
export const messagesFetch = (room) => {
return (dispatch) => {
firebase.database().ref(`/rooms/${room.roomId}/messages`)
.orderByKey()
.once('value')
.then(snapshots => {
snapshots.forEach(snapshot => {
dispatch({ type: 'messages_fetch_success', payload: snapshot.val() });
return false;
});
});
};
};
答案 1 :(得分:0)
是一个反应原生的应用程序,对吧?!如果是,请添加有问题的标记。
在firebase中,'child_added'为每个孩子开火,并且新生儿已经添加,例如 sketchthat 。使用'once'你不会听节点,但是,因为'child_added'你会为每个孩子激活你的功能。换句话说,您的函数返回相同常量的不同值(快照)。