android - 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 方法的“敏感性”。非常感谢!
解决方案
什么是数据类型ping
?如果它是一个对象,那么您useEffect
每次都会运行,因为 JavaScript 检查对象是否相等(我相信它们检查引用)。
解决此问题的一种方法是使用useDeepCompareEffect或 lodash 的isEqual。或者只是使用原始值作为useEffect
.
推荐阅读
- c# - CopyFromScreen - 检查句柄是否有效
- python - 具有 phash 汉明距离的 Elasticsearch 聚合
- java - Java Home 未定义(wso2ei-6.4.0 安装)
- java - Java FX 模块化应用程序,未找到模块(Java 11,Intellij)
- kubernetes - 有没有办法为 kubernetes pod 中的容器指定容器运行时?
- spring-boot - 外部化配置中的角色名称
- php - php从mysql中查找现有数据
- android - 为什么在 Looper.getMainLooper() 中接收垃圾数据
- ios - ios - (推送通知)当我调用 getNotificationSettings 时,alertSetting 返回 NotSupported
- javascript - Javascript 承诺未按预期顺序解决