首页 > 解决方案 > React Native 和 Firebase:如何限制获取数据的次数

问题描述

我目前正在开发一个使用 Firebase 作为后端的 React Native 应用程序。我不会在细节上太具体,但是,基本上,应用程序必须不断获取上传的新数据,所以我在我的主代码中添加了这部分:

useEffect(() => {
    db.ref('rooms').on('value', (data) => {
        if (startRoom.id) {
            ping = (data.val());
            setRoom(() => (data.val())[startRoom.id]);
        }
    }); 
},[ping]);

这样,每次在我的数据库中的对象“房间”中添加新数据时,应用程序都能够更新与其链接的所有变量。然而,这个过程可能会导致一些巨大的减速和性能问题:实际上,当不同用户上传大量数据时,或者当数据上传速度非常快时(比如说,上传是由用户点击处理的,所以非常快速的点击可能会导致db 要疯了),该应用程序会不断刷新页面,甚至每秒几次,导致我所说的速度变慢。所以我的想法是:无论如何我可以限制firebase ref方法随着时间的推移进行的提取次数吗?就像,如果数据库在一秒钟内上传七次,它只会捕获最后一次,而忽略例如在很短的时间内发生的上传。换句话说,我想知道是否有办法限制 ref 方法或 React Native 的 useEffect 方法的“敏感性”。非常感谢!

标签: androidfirebasereact-nativeuse-effect

解决方案


什么是数据类型ping?如果它是一个对象,那么您useEffect每次都会运行,因为 JavaScript 检查对象是否相等(我相信它们检查引用)。

解决此问题的一种方法是使用useDeepCompareEffect或 lodash 的isEqual。或者只是使用原始值作为useEffect.


推荐阅读