#react-hooks #dropzone #react-dropzone
#реагирующие хуки #dropzone #react-dropzone
Вопрос:
const [files, setFiles] = useState([]);
const onDrop = useCallback((acceptedFiles) => {
// Do something with the files
setFiles(
acceptedFiles.map((file: File) =>
Object.assign(file, {
preview: URL.createObjectURL(file),
})
)
);
}, []);
const { getRootProps, getInputProps } = useDropzone({
onDrop,
accept: 'image/*',
multiple: false,
});
const thumbs = files.map((file: { [key: string]: string }) => (
<div className={classes.imagePreview} key={file.name}>
<img className={classes.image} src={file.preview} alt={file.name} />
</div>
));
useEffect(() => {
// Make sure to revoke the data uris to avoid memory leaks
files.forEach((file: { [key: string]: string }) =>
URL.revokeObjectURL(file.preview)
);
}, [files]);
Мой HTML
<div className={classes.imageContainer}>
{thumbs}
<div className={classes.borderBox} {...getRootProps()}>
<input {...getInputProps()} />
<div>
<AddIcon />
</div>
</div>
</div>
Я пытаюсь загружать через dropzone по одному за раз, однако мое изображение заменяется вторым.
Ответ №1:
Исправлено с добавлением к состоянию
const onDrop = useCallback(
(acceptedFiles) => {
// Process files
const oneFile = get(acceptedFiles, '[0]', []);
Object.assign(oneFile, { preview: URL.createObjectURL(oneFile) });
setFiles([oneFile, ...files]);
},
[files]
);
Комментарии:
1. Привет @ vini, я только что установил react-dropzone последней версии 11.0.3, и я не вижу там стиль (css). Не могли бы вы, пожалуйста, сказать мне, что я делаю не так. Я хочу запустить ваш код
2. @UsmanI вам нужно импортировать стили в ваш js, иначе это не сработает