【问题标题】:React Query useInfiniteQuery invalidate individual itemsReact Query useInfiniteQuery 使单个项目无效
【发布时间】:2021-05-29 01:24:45
【问题描述】:
在使用 useInfiniteQuery 时如何使单个项目无效?
这是一个示例,展示了我要完成的工作。
假设我有一个成员列表,每个成员都有一个关注按钮。当我按下关注按钮时,会单独调用服务器以标记给定用户正在关注另一个用户。在此之后,我必须使整个无限查询无效以反映单个成员的关注状态。这意味着我可能在无限查询中加载了很多用户,我需要重新获取所有已加载的项目,以反映一项的更改。
我知道我可以在 follow fetch 返回成功时更改 queryClient.setQueryData 中的值,但如果不遵循此操作和成员的失效和获取,我基本上会与服务器不同步并依赖本地数据。
有什么方法可以解决这个问题?
这是一个参考用户界面照片,以防万一。
【问题讨论】:
标签:
reactjs
react-native
react-query
【解决方案1】:
我认为目前不可能,因为 react-query 没有标准化缓存和底层架构。所以列表中的一个条目(不管它是否无限)在任何情况下都不对应于详细查询。
如果你在query-keys前面加上相同的字符串,你可以利用部分query key匹配一次性失效:
['users', 'all']
['users', 1]
['users', 2]
queryClient.invalidateQueries(['users]) 将使所有三个查询无效。
但是是的,它会重新获取整个列表,如果您不想使用 setQueryData 手动设置,我目前看不到任何其他方式。
如果您从突变中返回一个用户的全部详细数据,我不明白为什么使用 setQueryData 设置它会使您与后端不同步。我们经常这样做:)