首页 > 解决方案 > Firestore - 获取文档后如何获取文档 ID?

问题描述

在我的 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>
  );
}

标签: javascriptnode.jsreactjsfirebasegoogle-cloud-firestore

解决方案


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

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

这应该在每个映射对象上创建一个属性id,以及使用 JavaScript 扩展运算符来自其他字段的数据。


推荐阅读