reactjs - 使用轮询间隔检测来自 Apollo useQuery 挂钩的数据更改
问题描述
useQuery()
我有一个使用 Apollo 客户端使用钩子从后端获取数据的 React 应用程序。每当后端数据发生变化时,我想在屏幕上显示一个刷新按钮。为此,我在 graphql 查询中使用轮询间隔每 5 分钟获取一次数据。
const { data, loading, error, refetch, previousData } = useQuery(QUERY, {
client: apolloClient,
pollInterval: 300000 // 5 minutes
});
在我的反应应用程序中,我使用 useEffect() 挂钩来设置本地状态以显示 refreshBanner
useEffect(() => {
if (data?.list !== previousData?.list) {
setShowRefreshBanner(true);
}
}, [data, previousData]);
由于始终会重新创建数据对象,因此会导致useEffect()
多次运行。有没有办法在不依赖数据对象的情况下检测数据是否发生变化。这data.list
是一个对象列表,值的变化发生在列表中的对象内部。
解决方案
推荐阅读
- r - 无法使用 R 中 readtext 包中的 readtext() 替换从 PDF 文件中提取的文本中的“\r\n-”
- perl - Perl 问题。需要一种方法来替换同一行上的两个变量
- reactjs - 当其中一些必须是全宽时,如何在具有 2 列的反应原生 FlatList 中呈现项目
- mongodb - 从 Scala 中的 mongoDB 读取
- python - 字符串 '\' 替换为 '/'
- python - 使用 Python 类在属性更新时触发程序终止
- javascript - 第一次安装组件后 componentDidUpdate 未触发(React)
- ios - 技术上是否可以截取 iOS 音频以添加 DSP 声音过滤?
- python - ValueError:logits 和标签必须具有相同的形状 ((None, 14) vs (None, 1))
- mysql - 计算 mysql group 上未重复的元素