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';
const client = new ApolloClient();
const query = gql`
query getData($variable: Int) {
data(filter: $variable) {
id
value1
value2
}
}
`;
const store = new GraphqlQueryStore({
query,
client,
apolloOptions: {},
mapData: (result) => result.data,
initialData: null,
skipQuery: (vars) => undefined,
updateData: (data, oldData, params) => data,
ssrId: undefined
});
store.loadData(
{
variable: 5
},
{
changeState: {},
apolloOptions: {}
}
);
try {
const result = await store.loadData();
} catch (error) {
}
store.state$.subscribe((state) => {
const { loading, loaded, error, data, variables } = state;
});
Для реализации бесконечной подгрузки, см. раздел
"Пагинация с дозагрузкой"
документации @proscom/prostore
.