React development

Use a realistic local mock API in React

React does not need a Mock API Studio-specific library. Start the local runtime, put its HTTP address in your development environment, and call it with fetch or your existing data library. The same endpoints support list, create, update, delete, error, authentication, and relationship flows.

Configure the base URL

Keep the development URL outside the component so moving to the production backend changes configuration rather than application logic.

.env.local
VITE_API_URL=http://localhost:4000

Fetch a typed collection

This component handles loading, HTTP errors, an empty list, and a successful paginated response. Match the environment-variable prefix to your React build tool.

React and TypeScript
type Product = { id: string; name: string; price: number };
type ProductPage = { data: Product[] };

function Products() {
  const [data, setData] = useState<Product[]>([]);
  const [error, setError] = useState<string>();
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch(`${import.meta.env.VITE_API_URL}/products?page=1&limit=20`)
      .then(async response => {
        if (!response.ok) throw new Error(`HTTP ${response.status}`);
        return response.json() as Promise<ProductPage>;
      })
      .then(result => setData(result.data))
      .catch(reason => setError(String(reason)))
      .finally(() => setLoading(false));
  }, []);

  if (loading) return <p>Loading products…</p>;
  if (error) return <p role="alert">{error}</p>;
  if (data.length === 0) return <p>No products found.</p>;
  return <ul>{data.map(item => <li key={item.id}>{item.name}</li>)}</ul>;
}

Create a record

POST requests update the local SQLite data. A subsequent list request includes the created record, which makes form and cache-invalidation flows behave like they would with a stateful backend.

TypeScript
await fetch(`${import.meta.env.VITE_API_URL}/products`, {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ name: "Mechanical Keyboard", price: 89.99 })
});

Test React UI states

Configure latency to keep suspense, spinners, and disabled actions visible. Inject 503 errors to verify error boundaries and retry controls. Use a small dataset for empty pages and relationships for master-detail routes.

Related questions

Does React need a special Mock API Studio package?

No. The local runtime exposes a standard HTTP API, so fetch, Axios, TanStack Query, and other clients can call it.

How do I switch to production later?

Keep the API base URL in environment configuration and preserve the agreed request and response contract.

Keep exploring

Last updated September 17, 2026. Product behavior described here is verified against the current Mock API Studio runtime.