javascript - 如何处理由于从 Firestore DB 检索而多次运行的 UseEffect?

标签 javascript reactjs firebase google-cloud-firestore use-effect

编辑:几乎改变了这个问题的整个主体
我正在构建一个预订应用程序。正在发生大量的重新渲染,并且根据@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 来检查。

const { theme, userObject, dateForRenderingTimeGrid } = useContext(Context);

useEffect(() => {
  console.log("Theme updated");
}, [theme]);
useEffect(() => {
  console.log("UserObject updated");
}, [userObject]);
useEffect(() => {
  console.log("DateForRenderingTimeGrid updated");
}, [dateForRenderingTimeGrid ]);
让我知道你在看什么。如果这些都没有真正触发效果但您仍然看到渲染,那么您可以确定它发生在您的组件中

关于javascript - 如何处理由于从 Firestore DB 检索而多次运行的 UseEffect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62781598/

相关文章:

javascript - 点击删除特定的JS代码?

javascript - jQuery el.each() 返回 HTMLAnchorElement 而不是元素实例

javascript - x 轴标签与 Highcharts 中图表之间的距离

javascript - 如何为 Bootstrap 警报创建 React 组件?

Android firebase 订阅多个主题的真实方法

javascript - jquery 滚动功能无法正常工作

reactjs - 如何为缓冲区几何中的每个顶点分配不同的颜色?三.js

reactjs - 使用 React Query 更新缓存后是否可以重新渲染组件?

firebase - 如何使用 flutter 和 firebase 进行离线身份验证

firebase - 在我的应用程序中添加 Firebase 后,GoogleMobileAds 无法正常工作