Apollo3在多次使用同一查询时,使用inMemoryCache中的relayStylePagination存在问题。
创始人
2024-09-09 07:00:25
0

该问题的解决方法是通过自定义一个缓存配置函数来解决。具体步骤如下:

  1. 创建一个自定义缓存配置函数,并绑定到ApolloClient中。
import { InMemoryCache, defaultDataIdFromObject } from '@apollo/client';

const cache = new InMemoryCache({
  typePolicies: {
    Query: {
      fields: {
        posts: {
          keyArgs: false,
          merge(existing = [], incoming, { args: { after } }) {
            return after ? [...existing, ...incoming] : incoming;
          },
          read(existing, { args: { after = null, first = 5 } }) {
            if (!after) {
              return existing && existing.slice(0, first);
            }
            const index = existing.findIndex((item) => item.cursor === after);
            return existing && existing.slice(index + 1, index + 1 + first);
          },
        },
      },
    },
  },
  dataIdFromObject: (object) => {
    switch (object.__typename) {
      case 'Post':
        return object.id;
      default:
        return defaultDataIdFromObject(object);
    }
  },
});

const client = new ApolloClient({
  uri: 'http://localhost:4000/graphql',
  cache,
});
  1. 使用自定义的缓存配置函数。
import { gql, useQuery } from '@apollo/client';

const POSTS_QUERY = gql`
  query PostQuery($first: Int!, $after: String) {
    posts(first: $first, after: $after) @connection(key: "posts") @relayStylePagination {
      edges {
        node {
          id
          title
          body
        }
        cursor
      }
    }
  }
`;

function Posts() {
  const { data, fetchMore } = useQuery(POSTS_QUERY, {
    variables: { first: 1, after: null },
  });

  const { edges, pageInfo } = data.posts || {};

  const loadMore = () => {
    fetchMore({
      variables: { first: 1, after: pageInfo.endCursor },
    });
  };

相关内容

热门资讯

透视免费!wpk俱乐部辅助器,... 透视免费!wpk俱乐部辅助器,wpk插件辅助,科技教程(有挂揭秘)1、每一步都需要思考,不同水平的挑...
透视游戏!wpk真吗,wpk透... 透视游戏!wpk真吗,wpk透视怎么安装,科技教程(有挂规律)1、金币登录送、破产送、升级送、活动送...
透视美元局!wpk有辅助器吗,... 透视美元局!wpk有辅助器吗,wpk德州局透视,规律教程(有挂黑科技)运wpk德州局透视辅助工具,进...
透视好友房!wpk俱乐部是真的... 透视好友房!wpk俱乐部是真的吗,wpk安卓下载辅助,解说技巧(有挂黑科技)1、让任何用户在无需wp...
透视最新!如何下载wpk透视版... 透视最新!如何下载wpk透视版,wpk私人辅助,详细教程(有挂脚本)如何下载wpk透视版软件透明挂微...
透视私人局!wpk有那种辅助吗... 透视私人局!wpk有那种辅助吗,wpk俱乐部有没有辅助,专业教程(有挂教程)1、wpk俱乐部有没有辅...
透视了解!wpk模拟器是什么,... 透视了解!wpk模拟器是什么,wpk模拟器是什么,爆料教程(有挂细节);1、进入游戏-大厅左侧-新手...
辅助透视!wpk插件,wpk透... 辅助透视!wpk插件,wpk透视辅助靠谱吗,攻略教程(有挂细节);所有人都在同一条线上,像星星一样排...
透视科技!wpk控制牌是真的吗... 透视科技!wpk控制牌是真的吗,wpk透视辅助,规律教程(有挂技巧);1、超多福利:超高返利,海量正...
透视辅助!wpk作弊是真的吗,... 透视辅助!wpk作弊是真的吗,wpk私人局有透视吗,安装教程(有挂插件);1、wpk私人局有透视吗透...