当前位置: 首页 > 知识库问答 >
问题:

在react中用拖放创建受控输入

鄂伟兆
2023-03-14

我试图创建一个组件上传一个单一的图像,显示其预览和删除选项。此外,能够从后端base64编码的URL上传到字段value中也很重要。这就是我此刻所拥有的。我将从应用程序状态传递到组件道具中,我实现了onchange处理程序,这样它就可以将URL写入状态,而deleteImage只是从状态中删除URL。

const ImageInput = ({ value, onChange, deleteImage }) => (
    <div>
        <input type="file" accept="image/*" onChange={onChange}/>
        { value &&
        (<div>
           <img src={value} alt="" width="50"/>
           <span onClick={deleteImage}>&#10060;</span>
         </div>)
        }
    </div>
);

但是现在我想用一个拖放区域来代替通常的输入,并寻找最简单的方法来做到这一点。如果有任何帮助,我将不胜感激。

import {DndProvider} from "react-dnd";
import {HTML5Backend} from "react-dnd-html5-backend";

const ImageInput = ({ value, onChange, deleteImage }) => (
    <div>
        <DndProvider backend={HTML5Backend}>
           <myDropTarget/>
        </DndProvider>
        { value &&
        (<div>
           <img src={value} alt="" width="50"/>
           <span onClick={deleteImage}>&#10060;</span>
         </div>)
        }
    </div>
);

然后创建这样一个组件。

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


export function myDropTarget(props) {
    const [collectedProps, drop] = useDrop({
        accept
    })

    return <div ref={drop}>Drop Target</div>
}

但对我不起作用。我得到一个错误:React Hook“usedrop”是在函数“mydroptarget”中调用的,该函数既不是React函数组件,也不是自定义React Hook函数

共有1个答案

白越
2023-03-14

您可以通过React-Uploady很容易地做到这一点:

import React from "react";
import Uploady from "@rpldy/uploady";
import UploadDropZone from "@rpldy/upload-drop-zone";
import UploadPreview from "@rpldy/upload-preview";

const firstFileOnlyFilter = (file, index) => index === 0;

export default function App() {
  return (
    <Uploady
      destination={{ url: "[upload-url]" }}
      fileFilter={firstFileOnlyFilter}
    >            
        <DropZone>Drag file here</DropZone>
        <br />
        <UploadPreview />
    </Uploady>
  );
}
 类似资料:
  • pre { white-space: pre-wrap; } 如果您能够通过您的 Web 应用简单地实现拖动和放置,您就会知道一些特别的东西。通过 jQuery EasyUI,我们在 Web 应用中可以简单地实现拖放功能。 在本教程中,我们将向您展示如何创建一个启用用户拖动和放置用户想买的商品的购物车页面。购物篮中的物品和价格将更新。 显示页面上的商品     <ul>         <li>

  • 我遇到了一个奇怪的问题,我不知道是怎么回事。我以前使用完全相同的代码,但现在它的行为不同了。也许我忽略了什么。我想要的:为了我的问题:我想呈现一个有三个选项的选择输入。其中一个选项是“Disabled DefaultValue”选项,它应该是占位符。其他两个选项都有一个值,而select的值是我要传递给它的状态。 所以我将表单呈现为这样的形式(我在这里保持简短,以便有一个干净的外观): 似乎选项中

  • 问题内容: 如今,我们可以将文件拖放到一个特殊的容器中,并使用XHR2上载它们。带有实时进度条等。非常酷的东西。 但是有时候我们不想要那么酷。我想要的是一次将文件拖放 到标准HTML文件输入中 :。 那可能吗?有什么方法可以从文件拖放中用正确的文件名(?)“填充”文件输入吗?(出于文件系统安全性原因,完整的文件路径不可用。) 为什么? 因为我想提交一份普通表格。适用于所有浏览器和所有设备。拖放只是

  • 问题内容: 这是我的小提琴 https://codepen.io/seunlanlege/pen/XjvgPJ?editors=0011 我有两个输入,并且我试图使用一种方法来处理任何输入字段的事件。 我已经在互联网上四处寻找解决方案,但一无所获。 我正在使用es6,请问该如何处理? 问题答案: 您尚未将属性传递给handeChange函数。像传递它一样,并且接收道具的顺序是错误的,属性将是第一个

  • 我正在对我的组件进行排序 我在选择标记中有一个错误。获取错误props.filters.sortby的值最初是日期。当我试图从下拉列表中更改它时,错误发生了。