Это потому, что вы неправильно используете перехватчик useState. Если вы хотите связать что-то с состоянием, вы должны использовать функциональный параметр setFiles. Вы можете сделать это следующим образом:
const onDrop = acceptedFiles => {
setFiles(files => files.concat(...acceptedFiles));
};
В противном случае вы могли бы сделать следующее:
const onDrop = useCallback(acceptedFiles => {
setFiles(files.concat(...acceptedFiles));
}, [files]);
Хук useCallback принимает состояние файлов как зависимость, и если этот массив изменяется, метод получает не извлекается из кеша :) Но я бы предпочел первый пример, потому что функция всегда должна исправлять состояние!
Взгляните сюда: