Android React Native和Firebase:如何限制获取数据的次数

Android React Native和Firebase:如何限制获取数据的次数,android,firebase,react-native,use-effect,Android,Firebase,React Native,Use Effect,我目前正在使用Firebase作为后端,使用React Native开发一个应用程序。我不会对细节说得太具体,但基本上,应用程序必须不断获取上传的新数据,因此我在主代码中添加了这一部分: useEffect(() => { db.ref('rooms').on('value', (data) => { if (startRoom.id) { ping = (data.val()); setRoom(() =>

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

useEffect(() => {
    db.ref('rooms').on('value', (data) => {
        if (startRoom.id) {
            ping = (data.val());
            setRoom(() => (data.val())[startRoom.id]);
        }
    }); 
},[ping]);
这样,每次在my db的对象“rooms”中添加新数据时,应用程序都能够更新链接到它的所有变量。然而,这个过程可能会导致一些巨大的速度减慢和性能问题:事实上,当不同的用户上传了大量数据时,或者当数据上传得非常快时(比如说,上传是由用户点击来处理的,因此非常快的点击可能会导致数据库发疯),该应用程序每秒甚至会刷新页面几次,这导致了我所说的速度减慢。 所以我的想法是:我是否可以限制firebase ref方法随时间进行的抓取次数?例如,如果数据库在一秒钟内上载七次,它只捕获最后一次,而忽略上载,例如,在很短的时间内发生的上载。换句话说,我想知道是否有办法限制ref方法或React Native的useffect方法的“灵敏度”。
多谢各位

如果更新一秒钟发生多次,我认为您应该改变方法


我认为你不应该在应用程序发生更改时立即用数据更新它,而是将更改存储到数组
changes
,并设置一个间隔,每隔3秒运行一次,检查
更改
数组。如果其中有数据,请使用它更新应用程序,然后清除阵列。通过这种方式,您可以确保应用程序仅以固定速率更新,即使有很多更改

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

解决这一问题的一种方法是使用或使用lodash's。或者只使用一个基本值作为
useffect
的依赖项