GraphQL
Этот плагин позволяет захватывать запросы GraphQL и просматривать их позже при воспроизведении записей сессий. Это очень полезно для понимания и устранения проблем. Плагин GraphQL совместим с реализациями Apollo и Relay.
Установка
Section titled Установкаnpm i @openreplay/tracker-graphql
Использование
Section titled ИспользованиеВызов plugin вернёт функцию, которая принимает четыре переменные operationKind, operationName, variables и result. Она возвращает result без изменений.
Если ваш веб-сайт является одностраничным приложением (SPA)
Section titled Если ваш веб-сайт является одностраничным приложением (SPA)import OpenReplay from '@openreplay/tracker';
import trackerGraphQL from '@openreplay/tracker-graphql';
//...
const tracker = new OpenReplay({
projectKey: PROJECT_KEY,
});
export const recordGraphQL = tracker.use(trackerGraphQL());
tracker.start();
Если ваше веб-приложение отрисовывается на стороне сервера (SSR)
Section titled Если ваше веб-приложение отрисовывается на стороне сервера (SSR)Следуйте приведённому ниже примеру, если ваше приложение использует SSR. Убедитесь, что tracker.start() вызывается после запуска приложения на стороне клиента (в useEffect или componentDidMount).
// openreplay.js
import OpenReplay from '@openreplay/tracker/cjs';
import trackerGraphQL from '@openreplay/tracker-graphql/cjs';
export const tracker = new OpenReplay({
projectKey: PROJECT_KEY
});
export const recordGraphQL = tracker.use(trackerGraphQL());
// MyApp.js
import { tracker } from './openreplay';
function MyApp() {
useEffect(() => { // use componentDidMount in case of React Class Component
tracker.start();
}, [])
}
//...
Relay
Section titled RelayДля Relay вам нужно вручную добавить вызов recordGraphQL в реализацию NetworkLayer. Если вы используете стандартный способ Network.create для его реализации, то следуйте приведённому ниже примеру.
import { Environment } from 'relay-runtime';
import { recordGraphQL } from './openreplay'; // see above for recordGraphQL definition
//...
function fetchQuery(operation, variables, cacheConfig, uploadables) {
return fetch('ENDPOINT', {
//...
})
.then(response => response.json())
.then(result =>
recordGraphQL(operation.operationKind, operation.name, variables, result)
);
}
//...
const network = Network.create(fetchQuery);
Подробнее см. Relay Network Layer.
Apollo
Section titled ApolloДля Apollo вам нужно создать новый ApolloLink с вызовом recordGraphQL и добавить его в свою цепочку. Вот пример того, как это сделать.
import { ApolloLink } from '@apollo/client';
import { recordGraphQL } from './openreplay'; // see above for recordGraphQL definition
const trackerApolloLink = new ApolloLink((operation, forward) => {
return forward(operation).map((result) => {
const operationDefinition = operation.query.definitions[0];
return recordGraphQL(
operationDefinition.kind === 'OperationDefinition' ? operationDefinition.operation : 'unknown?',
operation.operationName,
operation.variables,
result
);
});
});
//...
const link = ApolloLink.from([
trackerApolloLink,
//...
]);
Подробнее см. Apollo Link и Apollo Networking.
Руководство
Section titled РуководствоЕсли вы ищете практический пример того, как использовать этот плагин для захвата данных операций (мутаций и запросов) в ваших записях сессий, ознакомьтесь с нашим подробным руководством здесь.
Остались вопросы?
Section titled Остались вопросы?Возникли трудности с настройкой этого плагина? Присоединяйтесь к нашему Slack или загляните на наш Форум и получите помощь от нашего сообщества.