[英]Firestore - Web version 9 - get all documents in collection whose id is in array of ids
[英]Get all documents from collection on Firestore and store into array then print fields
我试图从 firestore 上的集合中获取所有文档并在 h1 标签中显示字段,但是,下面的代码不断获取数据(只应该获取一次)并且内容没有填充到 h1 中。 数据确实存储在主题数组中,但我似乎无法显示数据。
Firestore 连接
export const db = firebase.firestore();
主题文件
export default function Subjects() {
const [subjects, setSubjects] = useState([]);
useEffect(() => {
async function fetchSubjects(){
const data = []
await db.collection("Subjects").get().then((querySnapshot) => {
querySnapshot.forEach((doc) => {
console.log(doc.id, " => ", doc.data());
data.push(doc.data());
});
})
.catch((error) => {
console.log("Error getting documents: ", error);
});
setSubjects(data);
console.log(subjects);
}
fetchSubjects();
});
return(
<>
{subjects.map(subject =>(
<h1 key={subject.title}>{subject.title}</h1>
))}
</>
);
};
在单独的页面中调用主题组件
<Subjects/>
我认为它的行为是因为你没有在useEffect
传递第二个参数。
您可能要做的是添加[]
作为第二个参数,以便仅在第一次渲染时执行useEffect
。
useEffect(() => {}, []);
而且,您正在使用then
和await
这可能无法像await
期望的那样工作。 因此,在这种情况下,您可能想要删除then
部分,或者您可以在then
函数中设置状态。
useEffect(() => {
db.collection('Subjects')
.get()
.then((querySnapshot) => {
const data = [];
querySnapshot.forEach((doc) => {
console.log(doc.id, ' => ', doc.data());
data.push(doc.data());
});
setSubjects(data);
})
.catch((error) => {
console.log('Error getting documents: ', error);
});
}, []);
useEffect(() => {
async function fetchSubjects() {
const data = []
const querySnapshot = await db.collection("Subjects").get();
querySnapshot.forEach((doc) => {
console.log(doc.id, " => ", doc.data());
data.push(doc.data());
});
setSubjects(data);
}
fetchSubjects();
}, []);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.