Используйте RTK-запрос с Graphql

Пока я понимаю, что мне нужно создать свою собственную. Я мог бы написать запросы и мутации graphql, как в примере здесь https://rtk-query-docs.netlify.app/examples/react-with-graphql, получу ли я полную безопасность типов для запросов и мутаций, если я добавлю типы в query.builder как это builder.query<Device, void>или я должен использовать что-то вроде этого . В последнем случае как мой baseQuery посмотрите, использую ли я сгенерированный хук для библиотеки graphql-request.

Вот пример крючка из https://www.graphql-code-generator.com/docs/plugins/typescript-graphql-request#simple-request-middleware2 :

      import { GraphQLClient } from 'graphql-request';
import { getSdk } from './sdk'; // THIS FILE IS THE GENERATED FILE
async function main() {
  const client = new GraphQLClient('https://countries.trevorblades.com/');
  const sdk = getSdk(client);
  const { continents } = await sdk.continents(); // This is fully typed, based on the query
  console.log(`GraphQL data:`, continents);
}

Я думаю примерно так:

          import {getSdk} from './sdk'
    const client = new GraphQLClient('https://countries.trevorblades.com/');
    const graphqlBaseQuery = (someGeneratedQueryOrMutation, client) => {
      const something = someGeneratedQueryOrMutation(client);
      const { continents } = await something.continents();
      return { data: continents };
    };

Код на самом деле не имеет смысла, но я надеюсь, вы понимаете, к чему я клоню. Спасибо :)

1 ответ

Собственно, несколько дней назад я начал писать плагин для генератора кода. Вы можете увидеть сгенерированный результат здесь:https://github.com/phryneas/graphql-code-generator/blob/5f9a2eefd81538782b791e0cc5df633935164a89/dev-test/githunt/types.rtk-query.ts#L406-L427

Для этого вам потребуется создать api с baseQuery, используя любую библиотеку graphql, подобную этой .

Конфигурация будет выглядеть следующим образом

        ./dev-test/githunt/types.rtk-query.ts:
    schema: ./dev-test/githunt/schema.json
    documents: ./dev-test/githunt/**/*.graphql
    plugins:
      - typescript
      - typescript-operations
      - typescript-rtk-query
    config:
      importBaseApiFrom: '../../packages/plugins/typescript/rtk-query/tests/baseApi'
      exportHooks: true

И я думаю, что для целей разделения пакетов он также будет работать с near-operation-file предустановка.

Все это еще не апстрим - я постараюсь подготовить это в эти выходные, но не знаю, сколько времени потребуется, чтобы на самом деле это сделать.

Вы можете проверить репо, выполнить локальную сборку и установить ее с помощью чего-то вроде yalc хоть.

Для более простого подхода без генерации кода вы можете посмотреть этот пример или для более продвинутой настройки (но также без полной генерации кода, более интегрированной с существующими инструментами) вы можете посмотреть этот PR

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