提问人:gerard 提问时间:8/31/2023 最后编辑:VLAZgerard 更新时间:8/31/2023 访问量:36
如何处理TypeScript中event.target.files的null概率?
how to handle the probability of null for event.target.files in typescript?
问:
我有一个handleImageUpload函数,该函数将事件和正在上传的文件作为参数。我分配了文件类型 FileList(来自 react)。当 Event.Target 为空或 null 时,会出现此问题。如果我将文件类型更改为 FileList |null 那么它会影响我代码的其他区域,我在其他地方遇到错误,我该如何解决?有没有办法在不更改代码的其他部分的情况下处理空概率?
handleImageUpload 函数:
const handleImageUpload = async (e: React.ChangeEvent<HTMLInputElement> |
React.DragEvent<HTMLDivElement>, files:FileList) => {
stopReload(e);
const data = new FormData()
for(let i = 0; i<files?.length; i++){
data.append('images', files[i])
}
const {data:images} = await axios.post('/products/upload', data, {
headers: {'Content-Type':'multipart/form-data'}
})
setAddedPhotos(prevState => [...prevState, ...images])
console.log(addedPhotos)
};
多伦多证券交易所:
<div className="mb-8"
onDragOver={(e) => stopReload(e)}
onDrop={(e) => handleDragEvent(e)}
>
<label
className="relative cursor-pointer flex min-h-[200px] items-center justify-center rounded-md border border-dashed border-gray-300 p-12 text-center"
>
<div>
<span className="mb-2 block text-xl font-semibold text-[#07074D]">
Drop files here
</span>
<span className="mb-2 block text-base font-medium text-[#6B7280]">
Or
</span>
<span
className="inline-flex rounded border border-[#e0e0e0] py-2 px-7 text-base font-medium text-[#07074D]"
>
Browse
</span>
</div>
<input type="file" onChange={(e) => handleImageUpload(e, e.target.files (where the error occurs) )} name="image" className="hidden" multiple={true} />
</label>
</div>
其他功能:
const handleDragEvent = (e: React.DragEvent<HTMLDivElement>) => {
handleImageUpload(e, e.dataTransfer.files);
};
const stopReload = (e: React.DragEvent<HTMLDivElement> | React.ChangeEvent<HTMLInputElement>) => {
e.preventDefault();
e.stopPropagation();
}
答:
0赞
Christian
8/31/2023
#1
有没有办法在不更改代码的其他部分的情况下处理空概率?
我不这么认为。我不懂 React,但我认为你的问题与它无关。
e.target.files
有一个类型,没有办法绕过它。您必须调整函数并解决错误,如下所示:FileList | null
const handleImageUpload = async (e: React.ChangeEvent<HTMLInputElement> | React.DragEvent<HTMLDivElement>, files: FileList | null) => {
stopReload(e);
// 👇 skip image upload without input file
if(files === null) {
return;
}
const data = new FormData()
for (let i = 0; i < files.length; i++) { // 👈 optional chaining `files?.length` is no longer needed
data.append('images', files[i])
}
const { data: images } = await axios.post('/products/upload', data, {
headers: { 'Content-Type': 'multipart/form-data' }
})
setAddedPhotos(prevState => [...prevState, ...images])
console.log(addedPhotos)
};
评论
0赞
gerard
8/31/2023
谢谢,不妨这样做,试图找到,但我认为也没有办法解决它
0赞
Christian
9/1/2023
@gerard进展如何?
0赞
gerard
9/2/2023
它奏效了,谢谢
0赞
Christian
9/4/2023
@gerard很高兴知道它解决了您的问题。如果您接受我的回答,将不胜感激。
0赞
gerard
9/4/2023
啊,对不起,伙计,它已经完成了,谢谢
评论