【发布时间】:2021-03-15 21:00:55
【问题描述】:
好的,所以我使用 useEffect 来获取 firebase firestore 数据。这是我的钩子代码:
const [campaign, setCampaigns] = useState([])
useEffect(() => {
var docRef = db.collection("campaigns").doc(slug);
docRef.get().then(function(doc) {
if (doc.exists) {
console.log("Document data:", doc.data());
setCampaigns(doc.data())
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
},[]);
console.log(campaign[0].startDate.seconds) // gives the error stated below
console.log(campaign.images[0].url)// gives the error stated below
我可以访问所有顶级属性,例如 body、campaignPolicy 等,但如果我这样做了
TypeError: 无法读取未定义的属性“秒”
如果我做campaign.startDate.seconds 我得到同样的错误:
TypeError: 无法读取未定义的属性“秒”
完整的最小代码:
const ReviewComponent = (props) => {
const [open, setOpen] = useState(false)
const [campaigns, setCampaigns] = useState([])
const [currentCampaign, setCurrentCampaign] = useState([])
//First useEffect hook
const tempDoc = []
useEffect(() => {
var docRef = db.collection("campaigns");
docRef.get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
tempDoc.push({ id: doc.id, ...doc.data() })
// doc.data() is never undefined for query doc snapshots
setCampaigns(tempDoc)
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
},[]);
//Second use effect hook
useEffect(() => {
const docRef = db.collection("campaigns").doc(slug);
docRef.get().then(function(doc) {
if (doc.exists) {
console.log("Document data:", doc.data());
setCurrentCampaign(doc.data())
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
},[]);
const handleOpen = () => {
setOpen(true)
};
const handleClose = () => {
setOpen(false);
};
if(currentCampaign[0]) { // Or if(campaign[0])
console.log(currentCampaign)
}
return(
<Typography>
{currentCampaign.reviews[0].text}
</Typography>
)
【问题讨论】:
-
您正试图访问一个像对象一样的数组。改用campaign[0].startDate.seconds。
-
您共享的代码似乎都没有访问
seconds,因此错误似乎不太可能来自此代码。请确保您的问题包含minimal, complete/standalone code with which any of us can reproduce the problem。 -
我只是在 useEffect 钩子下做 console.log(campaign[0].startDate.seconds)
标签: reactjs firebase google-cloud-firestore react-hooks