处理apollo graphql编号分页缓存

处理apollo graphql编号分页缓存,graphql,apollo,apollo-client,Graphql,Apollo,Apollo Client,如果我有两条路线 /posts?page=1 /posts/write 让我们假设 每页有5篇文章 访问/posts?page=1,然后[post10、post9、post8、post7、post6]将保存在阿波罗缓存中 访问/posts?page=2,然后[post5、post4、post3、post2、post1]将保存在阿波罗缓存中 在这种情况下,如果我使用路由器/posts/write创建新的post,如何正确更新缓存 案例1 如果我只访问page=1,缓存中会存储5篇文章。我可以手

如果我有两条路线

/posts?page=1

/posts/write

让我们假设

  • 每页有5篇文章

  • 访问
    /posts?page=1
    ,然后
    [post10、post9、post8、post7、post6]
    将保存在阿波罗缓存中

  • 访问
    /posts?page=2
    ,然后
    [post5、post4、post3、post2、post1]
    将保存在阿波罗缓存中

在这种情况下,如果我使用路由器
/posts/write
创建新的post,如何正确更新缓存

案例1

如果我只访问
page=1
,缓存中会存储5篇文章。我可以手动将缓存更新为
[新帖子、帖子10、帖子9、帖子8、帖子7]
。然后我将url移动到
page2
,page2将正确显示
[post6,post5,post4,post3,post2]
。因为没有page2缓存,它将由服务器数据提供服务

案例2

如果我访问
page=1
,然后访问
page=2
,缓存中会存储10篇文章。如果我像案例1那样手动更新,
page2
将显示
[post5,post4,post3,post2,post1]
,它们是
post6
消失的。而且,我不能假定用户按顺序访问第1页、第2页。用户访问url
page1==>page4
情况如何


我如何避免这个问题?我认为已经有了解决方案。。。有人可以帮忙吗?

为什么要对缓存进行操作?在服务器上新建post=变异>插入完成。。查询刷新使用结果从服务器更新缓存中重新读取数据(项id数组[按查询]和项[按id]-规范化)。您可能希望手动更新缓存,因为这样更快(节省往返时间)使用
optimisticResponse
如果您编写了手动缓存更新,您将免费获得乐观用户界面。为什么要在缓存上操作?在服务器上新建post=变异>插入完成。。查询刷新使用结果从服务器更新缓存中重新读取数据(项目id数组[按查询]和项目[按id]-规范化)。您可能希望手动更新缓存,因为它更快(节省往返时间),并且使用
optimisticResponse
如果您编写了手动缓存更新,您可以免费获得乐观UI。