【发布时间】:2020-10-28 02:02:38
【问题描述】:
编辑:几乎改变了这个问题的全部内容
我正在构建一个预订应用程序。正在发生大量的重新渲染,根据@jpmarks 的建议,我试图找出哪个 useEffect 可能是罪魁祸首,并认为可能是下面的代码,它运行了 24 次。
我还将所有相关的组件和控制台警告上传到this repo,假设其他组件可能会影响它。
useEffect(
() => {
console.log('useEffect ServicEstabelecimento ran') //runs 24 times
async function getOfferedServicesFromDB() {
const approved = await approvedBusinessService.doc(businessId)
const snapshotApproved = await approved.get()
if (snapshotApproved.exists && snapshotApproved.data().offeredServices) {
setOfferedServices(Object.values(snapshotApproved.data().offeredServices))
} else {
const pending = await businessPendingApprovalService.doc(businessId)
const snapshotPending = await pending.get()
if (snapshotPending.exists && snapshotPending.data().offeredServices)
setOfferedServices(Object.values(snapshotPending.data().offeredServices))
}
return
}
getOfferedServicesFromDB()
},
[
/* businessId, setOfferedServices */
],
)
//React Hook useEffect has missing dependencies:
//'businessId' and 'setOfferedServices'.
//Either include them or remove the dependency array
//Tried adding them separately or both, nothing changes
我在这里要做的是查看企业提供哪些服务,并从数据库中获取该信息。无论业务是否已被接受,处理方式都会发生变化。
【问题讨论】:
-
您可以从 useEffect 依赖数组中删除“allBookings”,因为它没有在效果内使用。这可能是原因。由于您的效果实际上并未直接更新任何组件状态,因此除非 businessRef 方法导致组件以其他方式呈现,否则它不会导致渲染。
-
@jpmarks 我试过了,但没用,重新渲染继续进行
-
This line 被数组中的每个服务调用,从而为每个挂载的
ServiceEstabelecimento重复效果
标签: javascript reactjs firebase google-cloud-firestore use-effect