reactjs - 需要帮助解决从 Firebase 数据库中获取单个文档作为详细页面的问题
问题描述
我试图从集合“书籍”下的 Firebase 数据库中获取单个文档作为详细信息,但是由于渲染产生“未定义”,我的数组方法映射无法识别为函数。不知何故再次渲染并在日志中产生对象值。我把上面的日志截图贴出来了,希望有人能帮帮我,谢谢!!!!!!
import React, {useState, useEffect} from 'react'
import {Link} from 'react-router-dom'
import firebase from '../config/fbConfig'
const BookDetails = (props) => {
const [books, setBooks] = useState([])
useEffect(() => {
const db = firebase.firestore()
const id = props.match.params.id
var docRef = db.collection("books").doc(id);
docRef.get().then(doc => {
if(doc.exists){
const data = doc.data()
console.log("Document data:", data)
setBooks(data)
}else {
console.log("No such document!");
}
}).catch(error => {
console.log("Error getting document:", error);
})
}, [])
console.log('this log is before return', books.title)
return (
<div className="book_details">
<Link to="/"><h2>Home</h2></Link>
{console.log("this log is in the return method", books.title)}
<h1>The Summary Of the Book </h1>
{books.map( book => <ul key = "book.id" >
<li>Book Title: {book.title}</li>
<li>Book Author: {book.author}</li>
<li>Book Summery: {book.brief}</li>
</ul>)}
</div>
)
}
export default BookDetails
解决方案
因为您正在测试是否books
未定义并且仅在已定义的情况下调用 map 函数(即{books && books.map( [...] )}
),所以问题必须出在其他地方。
您正在从 Firebase 数据库中获取单个文档。map
因此,返回的数据将不是一个数组,而是一个原型中没有函数的对象。您可以从控制台日志中验证这一点。
您的组件呈现两次,因为您正在更改其状态useEffect
via setBooks(data)
。
推荐阅读
- cmake - CMake:在测试目标之前清理覆盖目录
- javascript - styled-component - 传递 props 最佳实践
- javascript - 禁用大于 3 位数字的按键
- angular - 如何立即解析 Mat-Datepicker 中的日期
- asp.net-core - asp.net core mvc 中的错误记录和处理
- visual-studio - 是否可以在没有管理员权限的情况下在模拟器中调试 android?
- ios - SwiftUI 中的图像选择器 - 我如何知道用户何时在基于 UIkit 的托管 ViewController 中选择了图像
- java - 在 Android Studio 中更改内容视图的更改样式
- data-science - 为具有多维数据的 K 均值选择质心
- flutter - Base 64 转换后图像未显示