How can I show a refreshing state without replacing the content already on screen?
Quick answer
Track whether usable results exist separately from whether a request is running. On the first load, show a loading state in place of results. When refreshing existing results, keep them visible and add a clear progress message. If the refresh fails, stop the progress indicator, retain the previous results, and explain that they could not be updated. Offer a retry if the interface supports one.
The question, the details, the next step.
A practical checklist
Track whether usable results exist separately from whether a request is active.
Show a loading state in the results area before the first results arrive.
During refresh, keep existing results visible and add a nearby progress message.
Distinguish a completed empty result from a request that is still loading.
On refresh failure, retain and identify the previous results; offer retry if available.
Clear the progress message when the request succeeds or fails.
A few more useful answers
Should I dim or cover the results during refresh?
Keep the existing results readable and avoid covering them with a blocking progress display. If a particular action must be unavailable during the update, communicate that separately.
What if the first request succeeds but returns no results?
Show a completed empty state, such as “No results found,” rather than a loading message. This makes clear that the request finished.
What should happen after a refresh fails?
Stop the progress indicator, keep the previous results visible, and say they were not updated. Provide a retry action if the interface supports another attempt.
