Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在react firebase挂钩/数据库上对数据进行排序_Reactjs_Firebase_Firebase Realtime Database_React Hooks - Fatal编程技术网

Reactjs 在react firebase挂钩/数据库上对数据进行排序

Reactjs 在react firebase挂钩/数据库上对数据进行排序,reactjs,firebase,firebase-realtime-database,react-hooks,Reactjs,Firebase,Firebase Realtime Database,React Hooks,因此,在React中,我正在使用“React firebase hooks/database”包读取firebase实时数据库 import { useList } from "react-firebase-hooks/database"; import { db, auth } from "../../firebase"; function GameHistory() { var dbRef = db.ref("/" + use

因此,在React中,我正在使用
“React firebase hooks/database”
包读取firebase实时数据库

import { useList } from "react-firebase-hooks/database";
import { db, auth } from "../../firebase";

function GameHistory() {
  var dbRef = db.ref("/" + user.uid);

  const [snapshots, loading, error] = useList(dbRef);
所以快照变量基本上包含所有firebase实时数据库数据。 然后,在我的代码后面,我只是将快照数组的每个元素映射到一个组件中

问题是,我想按照数据中的
.timestamp
firebase属性的顺序对快照数据进行排序。我不知道该怎么做

我尝试在映射快照数据时对其进行排序:

snapshots
            .sort((a, b) => {
              return a.val().timestamp > b.val().timestamp;
            })
            .map((game, index) => (MORE CODE
但这不起作用,因为timestamp是firebase对象,JavaScript不知道如何处理它

为了在timestamp变量上建立更多上下文,我将其定义为:

timestamp:firebase.firestore.FieldValue.serverTimestamp()


那么,有没有办法对快照数据进行排序?或者我应该使用另一个软件包?如果我应该使用其他内容,请显示如何读取和排序实时数据库的代码。

您在这里混淆了两个不同的数据库:

  • “react firebase hooks/database”中的
    导入{useList}和其他代码用于实时数据库
  • 时间戳:firebase.firestore.FieldValue.serverTimestamp()
    用于云firestore
虽然这两个数据库都是Firebase的一部分,但它们是完全独立的,每个数据库都有自己的API

要将服务器端时间戳写入实时数据库,请使用:

timestamp: firebase.database.ServerValue.TIMESTAMP
实际上,我还让数据库服务器处理排序,而不是在代码中进行排序,这是通过以下方式完成的:

var dbRef = db.ref("/" + user.uid);
const dbQuery = dbRef.orderByChild("timestamp");

const [snapshots, loading, error] = useList(dbQuery);
...

非常感谢。我更新了时间戳。另外,当我运行代码时,它说
this.Ref.orderBy不是一个函数
,我在谷歌上搜索了一下,但是
.orderByChild
也做了同样的事情吗?如果我想按降序排序,我会怎么做?我尝试了
.orderBy(“timestamp”,“desc”)
,但没有成功。你建议我在JS中本地反转数组吗?哦,orderBy是一个输入错误,应该是orderByChild。Firebase中没有降序排序,请参阅