- 添加"merge"选项到Query Hook中:
 
const { data, loading, fetchMore } = useQuery(GET_POSTS, {
  variables: { offset: 0, limit: 10 },
  fetchPolicy: 'cache-and-network',
  //添加merge选项
  notifyOnNetworkStatusChange: true,
  onCompleted: () => setIsFetchingMore(false),
  onError: () => setIsFetchingMore(false),
  //忽略__typename字段的变化
  merge: (existing, incoming, { args: { offset: incomingOffset } }) => {
    const merged = existing ? existing.slice(0) : [];
    for (let i = 0; i < incoming.posts.length; ++i) {
      merged[incomingOffset + i] = incoming.posts[i];
    }
    return {
      ...incoming,
      posts: merged
    };
  }
});
- 在Apollo Client实例中添加:
 
new InMemoryCache({
  typePolicies: {
    Query: {
      fields: {
        posts: {
          //需要手动更新offsets(__ref)的缓存
          keyArgs: false,
          merge(existing = [], incoming, { args: { offset = 0 } }) {
            const merged = existing.slice(0);
            for (let i = 0; i < incoming.posts.length; ++i) {
              merged[offset + i] = incoming.posts[i];
            }
            return merged;
          }
        }
      }
    }
  }
})