Skip to main content

The user should never wonder “is it working?”

Every time your app talks to the API, the user should see feedback. No feedback = “is it broken?” Feedback = “it’s working.” This is the difference between an app that feels amateur and one that feels professional.

Page-level loading

When a page loads data for the first time, show a full-page loading state:
A simple CSS spinner:

Button loading states

Disable buttons and show feedback during API calls:
The button tells the user three things:
  1. Before click: “Create User” — here’s what this does
  2. During API call: “Creating…” + disabled — your request is being processed
  3. After completion: back to “Create User” — ready for the next action
Always disable buttons during API calls. This prevents double submissions — clicking “Create User” twice would create two users. The disabled attribute stops the second click.

Delete button with loading

Inline loading for updates

When editing a single item in a list, show loading on that item only — not the whole page:
The subtle opacity change tells users “this item is being updated” without blocking the entire page.

Skeleton screens

For a polished feel, show placeholder shapes instead of a spinner:
Skeleton screens feel faster than spinners because they show the layout of what’s coming. The user’s brain starts processing the structure before data arrives. Use skeletons for lists and cards, spinners for simple operations.

A reusable loading pattern

Wrap the loading/error/data pattern into a reusable component:

Loading state checklist

The rule is simple: every API call needs loading feedback. If a user clicks something and nothing visibly happens for even half a second, add a loading state. Users will assume it’s broken if they don’t see immediate feedback.

What’s next?

Congratulations — you’ve built a complete full-stack application with React and FastAPI. You have CRUD operations, error handling, loading states, and professional UX patterns. Now let’s wrap up the course and prepare you for what comes next.

Course wrap-up

Review what you’ve learned and where to go from here