我正在准备一个表单,其中包含允许用户发布他的图片和关于她/他(自己)的视频的字段。为了发布图片,我准备了一个基于输入类型文件的组件,但是为了上传视频,我使用了 React Dropzone。现在我想将它保存到 redux,但是当我尝试这样做时,redux 抱怨它是不可序列化的项目,当我将它放入 JSON.Stringify() 时,redux 得到一个空对象。什么是最佳解决方案,我必须将它存储在某个状态,如果它是在表单的此步骤中创建的本地状态(幸运的是它是最后一个)但是如果用户想返回任何先前的步骤并返回此数据将丢失
请指教,dropzone 组件在下面,onResult
只是一个处理程序,它获取值并将操作调度到 redux
import React, { useCallback, useState } from "react";
import { useDropzone } from "react-dropzone";
export const FileDropzone = ({ onResult, fileTypes, maxFiles }) => {
const [progress, setProgress] = useState(0);
const [error, setError] = useState(false);
const onDrop = useCallback(acceptedFiles => {
acceptedFiles.forEach(file => {
const reader = new FileReader();
reader.onerror = () => setError(true);
reader.onprogress = data => {
if (data.lengthComputable) {
var progress = parseInt(
(data.loaded / data.total) * 100,
10
);
setProgress(progress);
}
};
reader.onloadend = () => onResult(reader.result);
reader.readAsArrayBuffer(file);
});
}, []);
const { getRootProps, getInputProps } = useDropzone({
onDrop,
maxFiles,
accept: fileTypes
});
return (
<>
<div
className={`border border-${
error ? "danger" : "light"
} rounded d-flex justify-content-center align-items-center hpx-100`}
{...getRootProps()}
>
<input {...getInputProps()} />
<p>Proszę kliknąć, lub upuścić wybrany plik.</p>
</div>
<div
className="bg-primary hpx-20 mt-1"
style={{ width: `${progress}%` }}
></div>
</>
);
};
谢谢