reactjs 使用Firestore中的更新数据更新React组件

db2dz4w8  于 2022-11-29  发布在  React
关注(0)|答案(1)|浏览(168)

我有一个chrome扩展,它将数据存储在Firestore中,并将数据填充到前端。我总是需要刷新页面才能看到新添加的数据,这不是一个用户友好的体验。我如何更新UI以显示新更新的数据而不必刷新页面?
到目前为止,我已经尝试使用useEffect来获取数据,在它里面,我使用了一个函数,该函数从缓存在chrome本地存储中的Firestore获取数据。
这是我的代码

const getFolderData = () => {
     getDataFromChrome("docId").then((res: any) => {
         setDocId(res.docId);
      });

    getDataFromChrome("content").then((res: any) => {
      //console.log("getting in mainfolder",res);
      // for (const item of res.content) {
      //   if (item.type.toLowerCase() === "subfolder") {
      //     // console.log(item)
      //     getSubFolder(item.id);
      //   }
      // }
      for (const item of res.content) {
        setTiersContent((pre: any) => [...pre, item]);
      }
    });
  };

  useEffect(() => {
    getFolderData();

  }, []);

我也收到这个错误。我也在使用chrome扩展API与后台脚本通信。这可能与问题有关

Uncaught (in promise) Error: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received
ws51t4hk

ws51t4hk1#

我从来没有用过firebase,所以我不知道你的函数是做什么的,我只能猜测。从我所看到的来看,有几点是错误的:
你的useEffect被设置为只在页面加载时运行,因为dep数组是空的,我假设你想在某种情况下重新获取。
如果这两个函数中的任何一个被认为是订阅,则useEffect需要返回一个cancel函数。
在需要时重新获取数据并不是一个新问题,像React Query这样的软件包有一些工具可以优化你的请求,并在需要时重新获取。如果你的应用有超过2-3个获取请求,我建议你给予。

相关问题