Запрос UseApolloClient не возвращает fetchMore

Я работаю над проектом с 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"] } }
      });

Немного помощи ? Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
1 585
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно документам 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, поскольку функциональность этих библиотек строится непосредственно поверх него и разработана так, чтобы ее было легче использовать.

Надеюсь это поможет!

Эй, спасибо за отличный ответ. Я использовал компонент запроса в конце, но я этого не знал, мне очень помогло!

Lule 22.07.2019 22:00

Другие вопросы по теме