微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么样的 Apollo 客户端类型策略用于无限滚动和分页结果?

如何解决什么样的 Apollo 客户端类型策略用于无限滚动和分页结果?

我最近更新了我工作中的 apollo 客户端包以使用第 3 版,还有一些我还不能完全掌握的东西。就像为每个查询名称全局定义类型策略一样。 这是我的问题,在工作中我们有一个搜索查询一个基于偏移量的查询,它的使用方式非常不同 用户界面上下文。我们有像表格一样的视图,包含大量分页数据,然后我们有无限滚动类型的提要。

我发现用于查询搜索的单一类型策略并不能真正支持这一点。这是我们的类型政策:

typePolicies: {
  Query: {
    fields: {
      search: {
        keyArgs: (args,context) => {
          const keyArgs = ['ascendingSort','input','sortField','size'];
          if (context.field?.alias?.value === 'pagedSearch') {
            keyArgs.push('from');
          }
          return keyArgs;
        },merge: (existing,incoming,{ args }) => {
          const start = args?.from || 0;
          if (!existing?.hits?.length) return incoming;

          const { hits,total,maxscore } = incoming;

          const mergedHits = existing?.hits ? existing?.hits?.slice(0) : [];
          hits.forEach((hit,i) => {
            mergedHits[start + i] = hit;
          });

          return {
            ...existing,hits: mergedHits,maxscore,};
        },},};

这里的hacky 部分是我们使用了字段别名:

pagedSearch: search(input: $input from: $from) 用于搜索查询并将偏移变量推送到分页查询的 keyArgs,以便用户在更改表格页面时获得新结果。

if (context.field?.alias?.value === 'pagedSearch') { keyArgs.push('from'); } 这确实完成了现在的工作,但我想知道如何为这些类型的查询实施类型策略?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。