【问题标题】:React Native and Firebase: how to limit number of times data are fetchedReact Native 和 Firebase:如何限制获取数据的次数
【发布时间】:2020-09-20 19:27:46
【问题描述】:

我目前正在开发一个使用 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 方法的“敏感性”。 非常感谢!

【问题讨论】:

    标签: android firebase react-native use-effect


    【解决方案1】:

    如果更新每秒发生多次,我认为你应该改变你的方法。

    我认为您不应该在应用更改时立即使用数据更新应用,而是将更改存储到数组 changes 中,并设置 一个 间隔运行一次,例如 3 秒,检查changes 数组。如果其中有数据,请使用它来更新您的应用程序,然后清除数组。这样,即使有很多变化,您也可以确保您的应用仅以固定速率更新

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-10-29
        • 2021-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多