Я работаю над проектом с Apollo на стороне клиента. Я использую react-apollo-hooks на своей стороне клиента. А у меня проблема с useApolloClient.
Когда я запускаю запрос с моим клиентом, который я получил в useApolloClient, я не получаю обратно все данные, которые мне нужны. FetchMore отсутствует. Если я использую обычный запрос (useQuery), я получаю это. Но проблема в том, что мне нужно запустить этот запрос по клику, и мне нужно использовать тот, который предоставляется клиентом apollo.
У меня есть эта функция для получения данных по клику:
const bulkSearch = async data => {
setContent(<Spinner />);
showModal();
try {
const response = await client.query({
query: BULK_SEARCH_PRODUCTS,
variables: { data }
});
if (!response.loading) {
setContent(
<ProductsListDisplay
products = {response.data.bulkSearch.products}
fetchMore = {response.fetchMore}
count = {{ total: 10 }}
/>
);
return 200;
}
} catch (err) {
return 400;
}
};
И ответ не содержит fetchMore.
С другой стороны, классический запрос возвращает fetchMore.
const newdata = useQuery(BULK_SEARCH_PRODUCTS, {
variables: { data: { ids: ["536003", "513010"] } }
});
Немного помощи ? Спасибо!





Согласно документам apollo-client, ApolloClient.query возвращает обещание, которое разрешается в ApolloQueryResult, который является более простым объектом, который имеет только свойства data, errors, loading, networkStatus и stale.
С другой стороны, Аргумент рендеринга компонента react-apollo компонента Query получает гораздо более богатый объект, а fetchMore является одним из его дополнительных свойств. Если вы хотите сделать что-то подобное, используя необработанный объект ApolloClient, вам придется использовать ApolloClient.watchQuery, который возвращает Наблюдаемый запрос, который вы можете использовать подписываться для использования результатов. Преимущество этого в том, что у вас есть доступ к большему количеству методов, таких как ObservableQuery.fetchMore.
Обратите внимание, что этот подход принципиально отличается от использования ApolloClient.query, поскольку эта функция запрашивает один запрос и возвращает результат в виде обещания, в то время как ApolloClient.watchQuery постоянно отслеживает ваш кеш и отправляет обновленные результаты в ваш метод подписки при изменении хранилища кеша, поэтому это более сложный жизненный цикл. . В общем, если вы уже используете react-apollo или один из пакетов @apollo/react-X, вы, вероятно, захотите держаться подальше от ApolloClient.watchQuery, поскольку функциональность этих библиотек строится непосредственно поверх него и разработана так, чтобы ее было легче использовать.
Надеюсь это поможет!
Эй, спасибо за отличный ответ. Я использовал компонент запроса в конце, но я этого не знал, мне очень помогло!