0.2.12 • Published 4 years ago

@proscom/prostore-apollo v0.2.12

Weekly downloads
134
License
ISC
Repository
-
Last release
4 years ago

prostore-apollo

Эта библиотека расширяет prostore, добавляя в него специальные классы сторов для GraphQL-запросов, выполняемых с помощью Apollo Client.

В библиотеку входят два класса: GraphqlQueryStore и GraphqlWatchQueryStore которые расширяют RequestStore, обеспечивая единообразное API для выполнения запросов и хранения их результатов в сторе, на который можно подписаться. Первый класс использует метод client.query для выполнения запросов, а второй - client.watchQuery.

Таким образом, GraphqlWatchQueryStore обновляется не только при первичном выполнении запроса, но и в случае последующего обновления локального кеша Apollo (например при рефетче, либо очистке кеша).

Использование

У GraphqlWatchQueryStore точно такое же API, поэтому ниже пример только для GraphqlQueryStore.

import gql from 'graphql-tag';
import { GraphqlQueryStore } from '@proscom/prostore-apollo';
import { ApolloClient } from 'apollo-client';

// Создаем клиент Apollo для выполнения запросов
const client = new ApolloClient(/*...*/);

// Задаем graphql-запрос с переменными
const query = gql`
  query getData($variable: Int) {
    data(filter: $variable) {
      # Всегда включайте id в запрос, если такое поле есть
      # в типе, потому что иначе Apollo Cache сломается
      # если какой-то другой запрос вернет тот же самый объект,
      # и в нем будет id
      id
      value1
      value2
    }
  }
`;

// Создаем наш стор
const store = new GraphqlQueryStore({
  // Выполняемый запрос
  query,

  // Клиент, который будет выполнять запрос
  client,

  // Дополнительные параметры, которые будут переданы
  // в client.query
  apolloOptions: {},

  // Функция, которая определяет что положить в state.data
  // Можно положить только часть ответа, например достать вложенный объект
  // Удобно для запросов, которые выполняют только один query
  mapData: (result) => result.data,

  // Так как GraphqlQueryStore расширяет RequestStore
  // то можно передать все параметры конструктора RequestStore
  // см. подробнее в Readme @proscom/prostore
  // https://gitlab.com/proscom/prostore/-/blob/master/packages/prostore/README.md#requeststore

  // Первоначальное значение
  initialData: null,

  // Функция пропуска запроса в зависимости от переменных
  skipQuery: (vars) => undefined,

  // Функция обновления данных при повторном запросе
  updateData: (data, oldData, params) => data,

  // Уникальный идентификатор стора для передачи данных
  // при использовании серверного рендеринга
  ssrId: undefined
});

// Чтобы инициировать запрос данных, надо вызвать
store.loadData(
  // variables - переменные запроса, определенные в query
  {
    variable: 5
  },
  // options - объект опций
  {
    // можно перезаписать состояние стора вручную
    changeState: {},
    // можно передать какие-то параметры в apollo.query
    apolloOptions: {}
  }
);

// Можно подождать ответа сразу
try {
  const result = await store.loadData(/* ... */);
} catch (error) {
  // ...
}

// А можно подписаться на все изменения стора
store.state$.subscribe((state) => {
  const { loading, loaded, error, data, variables } = state;
  // ...
});

Для реализации бесконечной подгрузки, см. раздел "Пагинация с дозагрузкой" документации @proscom/prostore.

0.2.12

4 years ago

0.2.11

4 years ago

0.2.10

4 years ago

0.2.8

4 years ago

0.2.6

4 years ago

0.2.5

4 years ago

0.2.4

4 years ago

0.2.2

4 years ago

0.2.0

5 years ago

0.1.13

5 years ago

0.1.10

5 years ago

0.1.9

5 years ago

0.1.8

5 years ago

0.1.6

5 years ago

0.1.0

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.3

5 years ago

0.0.20

5 years ago

0.0.19

6 years ago

0.0.18

6 years ago

0.0.17

6 years ago

0.0.16

6 years ago

0.0.15

6 years ago

0.0.14

6 years ago

0.0.13

6 years ago

0.0.12

6 years ago

0.0.11

6 years ago

0.0.10

6 years ago

0.0.9

6 years ago

0.0.8

6 years ago

0.0.7

6 years ago

0.0.6

6 years ago

0.0.5

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago