Firestore-提取文档后如何获取文档ID?

时间:2020-07-04 08:23:53

标签: javascript node.js reactjs firebase google-cloud-firestore

在我的Firestore数据库中,每个用户都有一个名为Apps的子集合。我想用每个应用程序的ID创建子URL。但是我不知道如何获取我的Apps子集合的文档ID。 也许我必须使用onSnapshot()方法,但是我不确定如何在我的情况下使用它。

感谢您的帮助。

function AppList() {
  const [apps, setApps] = React.useState([]);

  React.useEffect(() => {
    const fetchData = async () => {
      const db = firebase.firestore();
      var user = firebase.auth().currentUser;

      if (user != null) {
        var uid = user.uid;
        const data = await db
          .collection("Users")
          .doc(uid)
          .collection("Apps")
          .get();
        setApps(data.docs.map(doc => doc.data()));
      }
    };
    fetchData();
  }, []);

  return (
    <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}>
      {apps.map(app => (
        <Col className="gutter-row" span={100}>
          <Card
            style={{ width: 300, marginTop: 16 }}
            actions={[
              <Button type="default" size="middle">
                <Link to={}>
                  <EditOutlined />
                  <span> Edit the app </span>
                </Link>
              </Button>
            ]}
          >
            <Meta title={app.appName} description={app.description} />
          </Card>
        </Col>
      ))}
    </Row>
  );
}

1 个答案:

答案 0 :(得分:1)

您的data.docsDocumentSnapshot对象的数组。每个文档都有一个id属性和文档ID。如果要将其添加到您的状态,请尝试以下操作:

setApps(data.docs.map(doc => { id: doc.id, ...doc.data()));

这应该在每个映射对象上创建属性id,并使用JavaScript传播运算符从其他字段中创建数据。