上传
前言
你将在该篇学到:
- 如何将现有组件改写为
React Hooks函数组件 useState、useEffect、useRef是如何替代原生命周期和Ref的。- 一个完整拖拽上传行为覆盖的四个事件:
dragover、dragenter、drop、dragleave - 如何使用
React Hooks编写自己的 UI 组件库。
逛国外社区时看到这篇:
文章讲了React拖拽上传的精简实现,但直接翻译照搬显然不是我的风格。
于是我又用React Hooks 重写了一版,除CSS的代码总数 120行。
效果如下:
1. 添加基本目录骨架
app.js
import React from 'react';
import PropTypes from 'prop-types';
import { FilesDragAndDrop } from '../components/Common/FilesDragAndDropHook';
export default class App extends React.Component {
static propTypes = {};
onUpload = (files) => {
console.log(files);
};
render() {
return (
<div>
<FilesDragAndDrop
onUpload={this.onUpload}
/>
</div>
);
}
}
FilesDragAndDrop.js(非 Hooks):
import React from 'react';
import PropTypes from 'prop-types';
import '../../scss/components/Common/FilesDragAndDrop.scss';
export default class FilesDragAndDrop extends React.Component {
static propTypes = {
onUpload: PropTypes.func.isRequired,
};
render() {
return (
<div className='FilesDragAndDrop__area'>
传下文件试试?
<span
role='img'
aria-label='emoji'
className='area__icon'
>
😎
</span>
</div>
);
}
}