React-Query integration
Installation
To get started, install http-wizard using npm or yarn:
install @http-wizard/react-query
npm install @http-wizard/core @http-wizard/react-query zod axios
# or
yarn add @http-wizard/core @http-wizard/react-query zod axios
Usage
@http-wizard/react-query provides a wrapper of http-wizard with additional react-query functions.
Currently supported React-Query features include:
- useQuery
- useMutation
- useInfiniteQuery
- prefetchQuery
Let's instantiate our apiClient with @http-wizard/react-query. Instead of createClient, we use createQueryClient.
Client instanciation with axios
// client/apiClient.ts
import axios from 'axios';
import { createQueryClient, ZodTypeProvider } from '@http-wizard/react-query';
import type { Router } from 'server';
export const apiClient = createQueryClient<Router, ZodTypeProvider>(
  axios.instance()
);
apiClient usage with useQuery
// client/my-page.ts
import type { Router } from 'server';
import { apiClient } from './apiClient';
const MyComponent = () => {
  // user is safe: { id:string, name:string }
  const { data: user } = apiClient
    .ref('[GET]/user/:id')
    .useQuery({ params: { id: '1' } });
  if (isLoading) return <div>loading...</div>;
  return <div>{user.name}</div>;
};
apiClient usage with useMutation
// client/my-page.ts
import type { Router } from 'server';
import { apiClient } from './apiClient';
const MyComponent = () => {
  const { mutate } = apiClient.ref('[POST]/user').useMutation();
  return (
    <button onClick={() => mutate({ body: { name: 'John' } })}>
      Create a user
    </button>
  );
};
React query functions take many options.
Full React-query doc is available here.
Enjoy!