首页 > 解决方案 > Firestore 遍历文档数据 REACT.JS 中的对象

问题描述

我正在尝试在 bookChapters 路径中添加一些数据,但它不起作用,有什么建议吗?
在此处输入图像描述

export const createNewChapter = (bookId, inputText) => {
  return async dispatch => {
    dispatch(createNewChapterStart());
    try {
      const chaptersList = [];
      firebase
        .firestore()
        .doc(`Users/${bookId}/bookChapters/${inputText}`)
        .onSnapshot(querySnapshot => {
          querySnapshot.forEach(doc => {
            const chapters = doc.data().bookChapters;
            Object.keys(chapters).forEach(k => {
              chaptersList.push({ key: k, name: inputText });
            });
          });
        });
      dispatch(createNewChapterSuccess(inputText));
    } catch (error) {
      dispatch(createNewChapterFail(error));
      console.log(error);
    }
  };
};

标签: javascriptreactjsfirebasegoogle-cloud-firestore

解决方案


当您使用collection()时,它会返回一个CollectionReference。在这种情况下,它指向一个子集合“bookChapters”,但它map与您的屏幕截图中的一样。如果要遍历该地图,则需要先获取该文档,然后再读取该bookChapters字段。

const chaptersList = [];
firebase
  .firestore()
  .doc(`Users/${bookId}`)
  .onSnapshot(querySnapshot => {
    querySnapshot.forEach(doc => {
      const chapters = doc.data().bookChapters
      Object.keys(chapters).forEach((k) => {
        chaptersList.push({key: k, name: chapters[k]});
      })
    });
  });

如果要将所有章节存储在同一个文档中,最好将列表存储为数组。

如果您试图创建一个子集合,您可以通过单击此按钮来创建一个:

在此处输入图像描述


推荐阅读