0.0.3 • Published 8 months ago

@rest-api-codegen/react-query v0.0.3

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

REST API Code Generator For React-Query

Based on OpenAPI

Installation

// npm
npm install @rest-api-codegen/react-query --save-dev

// yarn
yarn add @rest-api-codegen/react-query -D

// pnpm
pnpm add @rest-api-codegen/react-query -D

Configuration

Schema directory

command options: -schema-directory -s

Generator will automatically scan all json files in schema directory.

Fetcher

command options: -fetcher -f

Customize the fetcher you wish to use in the generated file. React-Query is agnostic to the data-fetching layer, so you should provide it, or use a custom one.

The following options are available to use:

  • file#identifier You can use custom fetcher method that should implement the exported ReactQueryFetcher interface. Example: ./fetcher#apiFetcher.
interface FetcherOptions {
  url: string
  method: string
  query?: Record<string, unknown>
  body?: Record<string, unknown> | Record<string, unknown>[]
}

export async function apiFetcher<T = any>(options: FetcherOptions) {
  const response = await fetch(options.url, {method: options.method})
  const result = await response.json()
  return result as T
}

Output directory

command options: -output-directory -o

For generated files.

Naming like {schema directory}/sample.json -> {output directory}/sample.generated.ts

Quick Start

pnpm add @rest-api-codegen/react-query -D
pnpm add @tanstack/react-query

Create fetcher, content like here

npx @rest-api-codegen/react-query -s ./src/samples -o ./src/samples/generated -f ./utils/fetcher#apiFetcher
import {
  QueryClient,
  QueryClientProvider,
} from '@tanstack/react-query'
import { useGetUsersQuery, useCreateUserMutation } from './samples/sample.generated.ts'

const queryClient = new QueryClient()

function App() {
  return (
    // Provide the client to your App
    <QueryClientProvider client={queryClient}>
      <Users />
    </QueryClientProvider>
  )
}

function Users() {
  // Queries
  const { data } = useGetUsersQuery({ query: { limit: 20, offset: 0 } })

  // Mutations
  const mutation = useCreateUserMutation()

  return (
    <div>
      <ul>{data.users?.map((user) => <li key={user.id}>{user.name}</li>)}</ul>

      <button
        onClick={() => {
          mutation.mutate({
            name: 'Do Laundry',
          })
        }}
      >
        Add User
      </button>
    </div>
  )
}