javascript - 在 React Hook 中从 firebase promise 获取值(value)

标签 javascript reactjs firebase react-hooks

Firebase.js

import config from "./firebaseConfig";
import app from "firebase/app";
import "firebase/firebase-firestore";

class Firebase {
  constructor() {
    app.initializeApp(config);
    this.db = app.firestore();
  }

  getBooks = () =>
    this.db
      .collection("books")
      .get()
      .then(docs => docs.forEach(doc => doc.data()))
      .catch(err => console.error(err));
}

export default new Firebase();

BookCardsContainer.js

import React, { useState, useEffect } from "react";
import BookCards from "./BookCards";
import firebase from "../../firebase";

const BookCardsContainer = () => {
  const [books, setBooks] = useState([]);

  useEffect(() => {
    setBooks(firebase.getBooks());
  }, []);

  console.log(books);

  return <div />;
};

export default BookCardsContainer;

如果我在 Promise 上使用 then,为什么控制台中有 Promise {} 而不是实际值?当我在 firebase.js 中使用 console.log() 时,我有实际数据。

最佳答案

SetBooks 将书籍的值(value)设定为 promise 。

firebase.getBooks() 返回一个 promise 。

所以这就是为什么你在书中有一个 promise 。

你应该做什么

async function fetchMyAPI() {

  const response = await firebase.getBooks();
  setBooks(response);
}

useEffect(() => {
  fetchMyAPI();
}, []);

关于javascript - 在 React Hook 中从 firebase promise 获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55011944/

相关文章:

ios - Firebase:提供的存储桶与 Swift 中当前实例的存储桶不匹配

javascript - Firebase:如何使用表更改子项?

javascript - 为什么我的 AJAX 帖子不会重定向到正确的 ActionResult

javascript - 如何使用 Angular2 和 TypeScript 使选定的下拉值在更改时显示在标题上

reactjs - 如何使用 Animated 使列表 (FlatList) 自动滚动元素?

javascript - 状态改变错误

javascript - 在 JavaScript 中使用 `return false` 时处理 `eval`

javascript - 验证 React-Redux 中 'Container Component' 中触发的事件

javascript - 从 Git 子模块存储库导入 React 组件

angular - 如何在首次登录时要求和存储额外的用户配置文件数据?