我正在使用 Apollo Client 和 React。
问题是如何让 Apollo 意识到 getClass 正在寻找一个元素到 getClasses 的结果中。
例如,我有一个 getClasses 返回的所有类的列表,然后当用户单击链接时,它会显示该类的数据。问题是现在 Apollo 正在发出另一个 httpRequest 来获取缓存中已经存在的数据。
const CLASS_FRAGMENT = gql`
fragment ClassFields on Class {
id
date
hour
name
activity
}
`;
export const GET_ALL_CLASSES = gql`
${CLASS_FRAGMENT}
query getClasses {
classes {
...ClassFields
}
}
`;
export const GET_CLASS = gql`
${CLASS_FRAGMENT}
query getClass($id: ID!) {
getClasses(id: $id) {
...ClassFields
}
}
`;
这是 Apollo Client 的配置
const cache = new InMemoryCache({
typePolicies: {
Query: {
fields: {
groups: {
merge(existing = [], incoming) {
return incoming;
},
},
classes: {
merge(existing = [], incoming) {
return incoming;
},
},
students: {
merge(existing = [], incoming) {
return incoming;
},
},
payments: {
merge(existing = [], incoming) {
return incoming;
},
},
},
},
Group: {
keyFields: ["id"],
},
Class: {
keyFields: ["id"],
},
Affiliate: {
keyFields: ["id"],
},
Payment: {
keyField: ["id"],
},
},
});
export const useApolloClient = () => {
return new ApolloClient({
link: from([errorLink, httpLink]),
cache,
});
};
我想到的解决方法是在 getClasses 中添加一个参数,并在需要所有对象时发送一个标志,当我只需要一个类时发送 id。这是最好的方法吗?
谢谢!