Upload is a trigger plus a list. It opens the file picker, hands each file to a request, and keeps one row per file carrying the name, a progress bar, a status and the actions (preview, download, remove). Use it when the reader needs to see that list.
- Attachments on a form or a message, where the reader has to see what is attached before submitting.
- An avatar or a cover image, previewed in place, with maxCount={1} so a second pick replaces the first.
- A bulk import, where several files go at once and each one reports its own outcome.
- Anywhere a failed file has to stay visible and retryable rather than being silently dropped.
Use something else when the list is not the point.
- One file, submitted with the rest of the form, no per-file status: a plain <input type="file"> with a <label> is smaller, already accessible and needs no state.
- The file never leaves the browser (a CSV parsed client-side, an image measured before it is drawn). Read it in beforeUpload and return Upload.LIST_IGNORE, or skip the component.
- The screen needs a file manager (rename, move, folders, sorting). Build a table over your own API. Upload only knows about files it just sent.