Start here. This is the direct spoken answer to practice first.
Why this question matters
Data fetching is not just calling fetch. The UI needs a clear model for what the user sees while data is loading, missing, stale, or failed.
I would model states such as idle, loading, success, empty, error, and refreshing. First load can show a skeleton or loading state. After data exists, a refetch can keep stale data visible with a smaller pending indicator. Errors should have safe copy and a retry path. Empty state should distinguish no data from no results after filters. The component should not collapse into a blank screen while a request is in progress.