#apollo-client #react-apollo
Вопрос:
Я работаю с клиентом Apollo и реагирую.
Вопрос в том, как заставить Apollo понять, что getClass ищет один элемент в результате 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
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,
});
};
Обходной путь, о котором я думал, состоит в том, чтобы добавить аргумент в классы GET и отправить флаг, когда мне нужны все объекты, и идентификатор, когда мне нужен только один класс. Это лучший способ ?
Спасибо!