在发布以下内容之前,我已经查看了stackoverflow上的类似帖子,但没有一篇解决了我的问题。
我对从firestore数据库中响应和获取数据是新手。下面的代码根据需要工作,但在react中获得此提示
import React, {useState, useEffect} from 'react'
import {db} from '../firebase'
const ListRecord = () => {
const [details, setDetails] = useState([]);
useEffect(() => {
getContacts()
},[]);
const getContacts = async() => {
await db.collection('contacts').get().then((querySnapshot) => {
let arr = []
querySnapshot.forEach((doc) => {
arr.push({id: doc.id, value: doc.data()})
});
setDetails(arr);
});
console.log(details);
return details
}
return (
<div>
<h2>List Contact Details</h2>
</div>
)
}
export default ListRecord
根据其他类似的帖子,我尝试将getcontacts函数移动到useffect体中,这会使提示符消失,但是getcontacts函数会在一个连续的循环中运行。
我不确定我错过了什么,任何帮助都将不胜感激。
2条答案
按热度按时间kognpnkq1#
有不同的潜在解决方案:
1.将getcontacts()移动到useeffect()挂钩内:
如果只调用一次getcontacts(),并且只在组件第一次装载时调用,那么这可能是最符合逻辑的解决方案。
当然,你也可以用一个生命:
2.使用usecallback()钩子:
这是你可能想做的事情,如果
getContacts()
多次调用(例如,当组件安装时,每次某些道具更改时,或者当您单击某些按钮时)3.将getcontacts()移出组件并使其成为独立函数:
如果要将相同的逻辑重用到其他组件中,这是有意义的:
wwodge7n2#
我建议你看看怎么做
useEffect
它的依赖项列表在官方文档中起作用。简而言之,请执行以下操作:
这意味着
getContacts
变化useEffect
将重新运行。