一、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. html div重叠问题,原因分析和处理

    1.现象 <!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" c ...

  2. java-web的mybatis的学习

    idea开发必须是把Mapper文件与配置文件放到Resources标记的classpath目录下,eclips好像放到哪都行指定好路径就可以了, maven里面做好配置resources的路径,不然 ...

  3. The Little Prince-11/27

    The Little Prince-11/27    The little boy gradually realized that it is tiresome for children to be ...

  4. 怎样从外网访问内网Zeus?

    本地安装了一个Zeus,只能在局域网内访问,怎样从外网也能访问到本地的Zeus呢?本文将介绍具体的实现步骤. 准备工作 安装并启动Zeus 默认安装的Zeus端口是9090. 实现步骤 下载并解压ho ...

  5. 怎样从外网访问内网微服务Microservices?

    本地部署了一个微服务,只能在局域网内访问,怎样从外网也能访问到本地的微服务呢?本文将介绍具体的实现步骤. 准备工作 部署并启动微服务程序 默认部署的微服务端口是8088. 实现步骤 下载并解压hole ...

  6. Springboot项目修改html后不需要重启---springboot项目的热部署

    一.spring-boot-devtools 在pom中直接引入依赖 <dependency> <groupId>org.springframework.boot</gr ...

  7. UI自动化(二)css选择器

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. js通过 URL下载文件

    页面上一个button,点击之后触发一个function去请求数据,返回 pdf/epub 的URL,然后下载这个文件. 本来是直接用 a 写的,href里放资源地址,target设为'_blank' ...

  9. (4opencv)OpenCV PR 成功的收获和感悟

     2018-09-12,第一次对OpenCV PR成功 https://github.com/opencv/opencv/pull/12206 <find innercircle of cont ...

  10. 2018-2019-2 《网络对抗技术》Exp3 免杀原理与实践 20165211

    目录 2018-2019-2 <网络对抗技术>Exp3 免杀原理与实践 20165211 1. 基础问题回答 (1)杀软是如何检测出恶意代码的? (2)免杀是做什么? (3)免杀的基本方法 ...