我真的很难弄清楚如何在实时数据库中对数据进行排序。我不断参考他们的文档并应用所描述的步骤,但在数据排序方面似乎没有发生任何事情。我相信它应该与过滤一样工作,过滤工作正常,但没有积极的结果。
这是我的代码[React Native]:
useEffect(() => {
onValue(
// Order by the "createAt" field
query(
ref(db, "deals/"),
orderByChild("createAt"),
startAt("2023-12-31 23:59:59")
),
(snapshot) => {
setData(snapshot.val());
},
(err) => {
console.error(err);
}
);
}, []);
我还尝试过应用其他排序函数,例如 orderByChild()、orderByKey() 和 orderByValue()。此外,我尝试将该字段更改为“数字”和“字符串”类型,但仍然没有找到有效的解决方案。
首先:您在
createAt
中有一个拼写错误(在 d
之后缺少 create
),因此请确保这实际上是该属性在数据库中的名称。
如果匹配,数据库实际上将返回一个快照,其中子节点的顺序正确。但是您的代码随后会调用
snapshot.val()
,它将数据转换为 JSON 对象 - 并且 JSON 中的子节点根据定义是无序的。
要解决此问题,请使用快照的内置
forEach
操作按顺序处理子节点 - 然后将其作为数组传递到您的 UI:
(snapshot) => {
let results = [];
snapshot.forEach((child) => {
results.push({
id: child.key,
...child.val()
);
}
setData(results);
},
您当然还必须更新呈现 UI 的代码以处理数组。