一、react-dropzone

官方定义: Simple HTML5-compliant drag'n'drop zone for files built with React.js.

理解: 一个为react量身定制,基于H5 API:drop && drag可以实现拖拽上传文件的npm插件包

是的,以后再也不用自己苦苦地封装drop和drag了, react-dropzone使用非常简单,只需要调用一个事件.

当然这个包是针对于react的(直接作为组件使用),如果需要非组件的,直接npm官网搜索dropzone即可.

简单看一个效果图

二、用法

第一步当然是给项目添加插件包
```
//安装
npm install -D react-dropzone

//项目引入

import ReactDropzone from 'react-dropzone'

//项目使用

<ReactDroppzone

onDrop = {xxx}

...

/>


我们先来全面认识一下它
<h4>基础功能: <b>onDrop</b>事件</h4>

function onDrop(acceptedFiles, rejectedFiles) {

//识别成功的文件

console.log(acceptedFiles)

//识别失败的文件

console.log(rejectedFiles)

}


默认是可以接收任何文件,即使文件类型无法识别; 做一个测试,我同时上传`.jpg .doc 文件夹 .html .pdf`,然后打印一下上传成功后的信息 ![](https://img2018.cnblogs.com/blog/1414709/201810/1414709-20181001163220167-1535053026.png) 我们可以看到只有`文件夹`类型不能识别.另外还有一些其他属性 `lastModified`: 最后一次修改文件的时间
`lastModifiedDate`: 最后一次修改文件的日期
`preview`: 预览,后面具体介绍一下 <h4>限制文件类型</h4>
只需要在组件里添加`accept`属性即可

如果我上传非pdf类文件,会输出到`rejectFiles`,我们打印一下 ![](https://img2018.cnblogs.com/blog/1414709/201810/1414709-20181001164300126-991480142.png) <h4>上传文件预览</h4>

//提取file里面preview值即可

{

fileArr.length > 0 && fileArr.map( (item, index) => (

预览


))

}


![](https://img2018.cnblogs.com/blog/1414709/201810/1414709-20181001170428606-1880307954.png) <h4>样式相关属性</h4>
Default State(dropzone原始状态): `className` && `style` Drag is Active(拖拽到盒子上但未放开): `activeClassName` && `activeStyle` Dropped Files are Accepted(拖拽后,文件能被识别): `acceptClassName` && `acceptStyle` Dropped Files are Rejected(拖拽后,文件不能被识别):
`rejectClassName` && `rejectStyle` Dropzone is Disabled(功能被禁止时): `disabledClassName` && `disabledStyle` 最后一条是在`disabled="true"`时生效
当设置了这个属性,在DOM里可以看到变成:`aria-disabled="true"`
字面上意思应该是<b>无障碍交流</b>,当时我实际上用的时候,是自动打开这个文件.(比如拖拽了一个图片后,会自动用浏览器打开) <h4>结合React</h4>

import React,{ Fragment } from 'react'

import './style.css'

import ReactDropZone from 'react-dropzone'

export default class DropzoneComp extends React.Component{

constructor(props){

super(props)

    this.state = {
fileArr: []
} this.handleDrop = this.handleDrop.bind(this);
} handleDrop(acceptFile, rejectFile){
let { fileArr } = this.state; console.log('acceptFile ======>', acceptFile)
console.log('rejectFile ======>', rejectFile)
if(rejectFile.length){
alert('不支持该格式')
return;
}
acceptFile.map( item => {
fileArr.push(item)
}) this.setState({
fileArr,
}) } render(){
const { fileArr } = this.state;
return(
<div className="dropzone">
<div className="upload initUpload">
<p>
原上传文件方式
</p>
<input type="file"/>
</div>
<div className="upload dropzoneUpload">
<p>
dropzone上传方式
</p>
<ReactDropZone
className="dropZoneStyles"
activeClassName="dragStyles"
acceptClassName="addDropZoneStyles"
accept="image/*"
onDrop = {this.handleDrop}
>
<span>+</span>
</ReactDropZone>
{
fileArr.length ? fileArr.map( (item, index) => (
<p >{item.name}</p>
)) : <p>未选择任何文件</p>
}
</div>
{
fileArr.length > 0 && fileArr.map( (item, index) => (
<div key={index} className="previewDiv">
<h3>预览</h3>
<img alt="Preview" src={item.preview} className="previewImg"/>
</div>))
}
</div>
)
}

}


![](https://img2018.cnblogs.com/blog/1414709/201810/1414709-20181001172111177-1784233054.png)

每日质量NPM包拖拽文件上传_react-dropzone的更多相关文章

  1. html5实现拖拽文件上传

    以下是自学it网--中级班上课笔记 网址:www.zixue.it html文件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict ...

  2. nodemailer + express + h5 拖拽文件上传 实现发送邮件

    一.部署 1.部署Express 2.准备一个邮箱并开始SMTP服务 二.服务器端 三.客户端 四.效果:

  3. 使用commons-fileupload包进行大文件上传注意事项

    项目中使用 commons-fileupload-1.2.1.jar 进行大文件上传. 测试了一把,效果很不错. 总结如下: 必须设置好上传文件的最大阀值 final long MAX_SIZE = ...

  4. Java使用comms-net jar包完成ftp文件上传进度的检测功能

    本文章只讲述大致的思路与本次功能对应的一些开发环境,具体实现请结合自己的开发情况,仅供参考,如果有不对的地方,欢迎大家指出! 准备环境:JDK1.7 OR 1.8.eclipse.ftp服务器(可自行 ...

  5. 每日质量NPM包事件绑定_bindme(详解React的this)

    一.bindme 官方定义: is a helper to bind a list of methods to an object reference 理解: 因为不推荐在render()里构建函数, ...

  6. 每日质量NPM包复制_copy-to-clipboard

    一.copy-to-clipboard 官方定义: Simple module exposing copy function 理解: 一个超级简单的复制功能,并且这种方法适用于通过别的事件触发复制功能 ...

  7. 每日质量NPM包-classnames

    一.classnames 现在到处都追求效率开发,所谓存在即合理,各种各样的开源包/项目火热,也是因为他们大大解决了之前复杂的逻辑.作为榜上前10的热门包:classnames.还真需要了解了解它才能 ...

  8. 每日质量NPM包模态框_react-modal

    一.react-modal 官方定义: Accessible modal dialog component for React.JS 理解: 一个容易使用的React模态框组件 二.用法 有时候我们不 ...

  9. drag file upload xhr 拖拽异步上传文件

    <div id="droptarget" style="width: 500px; height: 200px; background: silver"& ...

随机推荐

  1. git 提交命令

    git stash -u 占存本地版本 git commit git fetch 提交 git rebase git stash pop 将本地没有提交的代码暂存,然后切换到其他分支,然后再回到当前分 ...

  2. Porsche Piwis Tester II Diagnostic Tool -Next Generation of PIWIS Tester KTS520

    Porsche Piwis Tester II is the latest inspect equipment of Porsche Company. This is the latest profe ...

  3. Python+OpenCV图像处理(十二)—— 图像梯度

    简介:图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导. Sobel算子是普通一阶差分,是基于寻找梯度强度.拉普拉斯算子(二阶差分)是基于过零点检测.通过计算梯度,设置阀值, ...

  4. DNS缓存中毒的知识

    网络上出现互联网漏洞——DNS缓存漏洞,此漏洞直指我们应用中互联网脆弱的安全系统,而安全性差的根源在于设计缺陷.利用该漏洞轻则可以让用户无法打开网页,重则是网络钓鱼和金融诈骗,给受害者造成巨大损失. ...

  5. MyEclipse如何修改XML文件默认打开的编辑器

    1.MyEclipse如何修改XML文件默认打开的编辑器 Windows--->Preferences--->General--->Editors--->File Associ ...

  6. Web开发笔记 #07# Swagger Editor

    Swagger Editor是一款可以用yaml格式进行RESTful API设计.可视化.测试的工具,并且能够实时看到自动生成的文档.效果大概是这样的↓ 根据官方网站介绍,如果是团队的话,建议用在线 ...

  7. if语法

    语法一: if 条件:   条件成立时执行的子代码块 age_of_girl=31 if age_of_girl > 30: print('阿姨好') 语法二:if + else   if 条件 ...

  8. kafka数据可靠传输

    再说复制Kafka 的复制机制和分区的多副本架构是Kafka 可靠性保证的核心.把消息写入多个副本可以使Kafka 在发生崩愤时仍能保证消息的持久性. Kafka 的主题被分为多个分区,分区是基本的数 ...

  9. django 数据库html显示

    template {% autoescape off %} {% for each in obj %} <h2>{{ each.food }}</h2> <br/> ...

  10. python的反射函数(hasattr()、getattr()、setattr()与delattr())和类的内置属性attr(__getattr()__、__setattr()__与__delattr()__)

    主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省),有四个可以实现自省函数. hasattr(object,name) 判断object中是否有name字符串对应的属性或方法,返回Tr ...