1

我正在尝试创建一个用于上传单张图片的拖放区域,并且我想使用函数将其传递给 base64 编码 URL 中的应用程序状态onDrop

import React from "react";
import {useDrop} from 'react-dnd'


export default function MyDropTarget(props) {
    const [drop] = useDrop({
        accept: "box",
        collect: (monitor) => {
                const res = monitor.getItem();
                if (res && res.files) {
                    const reader = new FileReader();
                    reader.onloadend = () => props.onDrop(reader.result);
                    reader.readAsDataURL(res.files[0]);
                }
        },

    });
    return (
        <div ref={drop}>
            Drag item here
        </div>);
};

这就是我使用这个组件的方式:

<DndProvider backend={HTML5Backend}>
  <MyDropTarget style={{height: "100px", width: "100px"}} onDrop={updateImage}/>
</DndProvider>

因为我是新手,react-dnd所以我遇到了一些问题。我遇到了这样的错误TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'.
,我认为我不monitor.getItem()正确理解它的结构,并感谢任何提示如何修复它。

4

1 回答 1

2

我的猜测是你需要确保res.files[0]有一个值(不是undefinednull)。

 if(res.files[0]){
  reader.readAsDataURL(res.files[0]);
 }

res.files[0]如果没有帮助,您也可以尝试检查 is 的类型。

于 2020-11-02T15:47:52.053 回答