With React

With React

There are an example using @tanstack/react-query, you can use the API like this:

import { useQuery } from '@tanstack/react-query';
 
function Top10Users() {
  const [pagination, setPagination] = useState({ page: 1, pageSize: 10 });
  const { data, isLoading, refetch } = useQuery({
    queryKey: [{ name: 'users', entity: 'list', ...pagination }],
    queryFn: ({ signal, queryKey }) => api.users.list({
      page: queryKey[0].page,
      pageSize: queryKey[0].pageSize,
    }, { signal }),
    // ...other query options here.
  });
 
  return (
    <div>
      <div>Top 10 users:</div>
      <ul>
        {data?.records.map((user) => (
          <li key={user.id}>{user.name}</li>
        ))}
      </ul>
      <div>Total: {data?.total}</div>
      <button type="button" onClick={() => refetch()}>Refresh</button>
    </div>
  );
}

Use API Context

npm i @yme/react-api
import { createApiProvider } from '@yme/react-api';
 
const { ApiProvider, useApi, useApiClient } = createApiProvider(api);
 
function App() {
  return (
    <ApiProvider>
      <User id={123}>
    </ApiProvider>
  );
};
function User({ id }: { id: number }) {
  const api = useApiClient();
  // or use the hook to get the api function
  // const getUser = useApi('users.one');
 
  const {
    data,
  } = useQuery({
    queryKey: [{ name: 'users', entity: 'one', id }],
    queryFn: ({ signal }) => api.users.one({ id }, { signal }),
    // TIP: use react-query selector
    // select: (data) => data.name,
  });
 
  return (
    <div>
      User: {data.name}
    </div>
  );
};