首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火源UseEffect

火源UseEffect
EN

Stack Overflow用户
提问于 2021-02-25 19:33:57
回答 1查看 339关注 0票数 2

因此,这里有一些代码,它应该在防火墙服务器更新时自动运行:

代码语言:javascript
复制
//Whenever the firebase database changes, it runs this method
    useEffect(() => {
        db.collection("posts").orderBy("timestamp", "desc").onSnapshot((snapshot) =>
            //Loops through all the posts and adds the data into an array
          setPosts(snapshot.docs.map((doc) => doc.data()))
        );
      }, []);

但是它怎么知道数据库更新了呢?我认为useEffect只在屏幕呈现时运行,那么当数据库被更新时,它怎么知道如何运行呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-25 19:45:05

这在概念上类似于事件处理程序的工作方式。

想想这个:-

代码语言:javascript
复制
  useEffect(() => {
        window.addEventListener('scroll',handleScroll);
      }, []);

在上面的代码中,处理程序只注册一次,因为[]依赖数组使效果只运行一次post优先呈现。但是对于每个滚动,handleScroll将触发,因为它是注册的

类似地,在您的示例中,onSnapshot是为您注册的事件侦听器,但是如果您要在此onSnapshot回调中记录react状态,您将看到由于关闭而导致的陈旧状态(您最初设置的状态可能是空数组)。在这里,您只需从onSnapshot回调的第一个参数(即snapshot )中获取最新的内容,并将其设置为您的状态,所以一切正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66375287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档