【发布时间】:2021-07-30 03:51:54
【问题描述】:
我正在为大量复杂的数据实现一个非常高级的表(使用 React-Table)。我从遵循 Apollo 的实现基于偏移的分页的指南开始,我也得到了排序工作。我坚持的是将其与服务器端过滤相结合。
我对@987654322@ 的定义如下所示——我正在查询一个字段Targets:
const cache = new InMemoryCache({
typePolicies: {
Query: {
fields: {
Targets: {
...offsetLimitPagination(),
read(existing, { args }): any {
if (args && args.limit !== undefined && args.offset !== undefined) {
return existing && existing.slice(args.offset, args.offset + args.limit);
}
},
},
},
},
},
});
这几乎是指南告诉我为 Pagination 做的事情的结果。我的组件查询后端:
const { networkStatus, error, data, fetchMore, refetch } = useQuery<GetTargetsQuery, GetTargetsQueryVariables>(GET_TARGETS, {
...
notifyOnNetworkStatusChange: true,
variables: {
limit: tableState.pageSize,
offset: tableState.pageNumber * tableState.pageSize,
orderBy: tableState.orderBy,
where: {
_and: [initialFilters, queryFilters],
},
},
});
问题是,当我修改queryFilters 并重新获取数据时,我在浏览器的网络选项卡中看到了正确的数据,但我的组件仍然从缓存中读取旧数据。似乎offsetLimitPagination 钩子并不是专门为合并过滤而设计的(?)。
我不能使用 React-Table 的内置过滤,因为它只对已查询的数据进行操作(在我的情况下,它是整个集合的一部分)。 如果设置了新的过滤器,我如何修改我的InMemoryCache 以覆盖缓存中的数据? 或者有更好的方法来解决这个问题或提出更好的问题来完成这项工作?
【问题讨论】:
-
我不清楚在那里指定什么,如果唯一真正改变的是我的“哪里”的内容
标签: reactjs caching graphql apollo react-apollo