- 添加"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;
}
}
}
}
}
})