The exact API contract type from defineApi().
const queryApi = createQueryClient(api, { baseUrl: '/api' });
// In a component:
const { data } = queryApi.todos.list.useQuery({ query: { page: 1 } });
const mutation = queryApi.todos.create.useMutation({
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: queryApi.todos.queryKey()
});
}
});
Maps an API contract to a fully typed query client.
Each group becomes a namespace containing endpoint hooks, plus a group-level
queryKey()method for bulk invalidation.