为什么渲染数据时无法在firebase中订购,但在控制台日志中却可以正常工作
export const fetchAPI = (endpoint, dispatchType) => (dispatch) => new Promise((resolve, reject) => {
dispatch({ type: CHANGE_LOADING, payload: true });
firebase.database().ref(endpoint).orderByChild('name').on('value', (snapshot) => {
if (snapshot.val() === null) {
dispatch({ type: CHANGE_LOADING, payload: false });
reject(false);
} else {
snapshot.forEach((snap) => console.log(snap.val()));
const items = [];
Object.keys(snapshot.val()).map((snap) => items.push({
key: snap,
apiItem: snapshot.val()[snap],
}));
dispatch({ type: dispatchType, payload: items });
dispatch({ type: CHANGE_LOADING, payload: false });
resolve(items);
}
});
});
答案 0 :(得分:0)
在Firebase上运行查询时,它将为匹配的快照返回三段信息:
调用snapshot.val()
时,数据将转换为JSON对象,该对象仅包含键和值的位置。 JSON对象中的键没有定义的顺序,因此,当您调用snapshot.val()
时,有关该顺序的信息将会丢失。
解决方案就是您在方法顶部所做的事情:使用snapshot.forEach()
以正确的顺序查看子节点。