Клиент Apollo, как получить один элемент из запроса, который получает все элементы

#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 и отправить флаг, когда мне нужны все объекты, и идентификатор, когда мне нужен только один класс. Это лучший способ ?

Спасибо!