React Ant Dragger
一个基于React DnD封装的drag-and-drop组件
安装
# npm npm i react-ant-dragger -S# yarn yarn add react-ant-dragger
使用
假设存在一个容器组件Container
和一个展示组件List
,代码如下:
//Container.js Component // ....... { return <List /> }
// List.js { const list = 'AAAAAAAAAAAAAAAAAAA' 'BBBBBBBBBBBBBBBBBBB' 'CCCCCCCCCCCCCCCCCCC' 'DDDDDDDDDDDDDDDDDDD' 'EEEEEEEEEEEEEEEEEEE' return <ul> list </ul> }
我们想对List
的每个itemli
实现拖动效果应该怎么做呢?
首先,容器组件用DraggerContext
进行包装,例如:
//Container.jsimport React from 'react'+import {+ DraggerContext+} from 'react-ant-dragger' import List from './List.js' class Container extends React.Component { // ....... render () { return ( <List /> ) }} - export default Container+ export default DraggerContext(Container)
然后,对展示组件List
添加如下代码
// List.jsimport React from 'react'+import {+ Dragger,+ Draggable+} from 'react-ant-dragger' export default () => { const list = [ 'AAAAAAAAAAAAAAAAAAA', 'BBBBBBBBBBBBBBBBBBB', 'CCCCCCCCCCCCCCCCCCC', 'DDDDDDDDDDDDDDDDDDD', 'EEEEEEEEEEEEEEEEEEE' ] return (+ <Dragger> <ul> { list.map((item, index) => (- <li key={index}>{item}</li>+ // dragToken is required+ <Draggable key={index} dragToken={() => item)}>+ <li>{item}</li>+ </Draggable> )) } </ul>+ </Dragger> )}
DONE!🎉🎉🎉
处理事件
支持如下事件:
- onDragStart 开始拖动时触发
- onDragEnd 拖动结束时触发
- onDragEnter 拖动元素进入某个目标元素时触发
- onDragLeave 拖动元素离开某个目标元素时触发
- onDragging 拖动过程中触发
- onDrop 松开时触发
- onDragEdge 拖动到容器边界时触发 💫
Component { superprops context thishandleDragStart = thishandleDragStart thishandleDragEnd = thishandleDragEnd thishandleDrop = thishandleDrop thishandleDragging = thishandleDragging thishandleDragEnter = thishandleDragEnter thishandleDragLeave = thishandleDragLeave thishandleDragEdge = thishandleDragEdge thisstate = data: 'AAAAAAAAAAAAAAAAAAA' 'BBBBBBBBBBBBBBBBBBB' 'CCCCCCCCCCCCCCCCCCC' 'DDDDDDDDDDDDDDDDDDD' 'EEEEEEEEEEEEEEEEEEE' messages: } { const messages = thisstate const msgs = ...messages msgs this } { this } { this } { console } { this } { this } { this } { const left top right bottom } = strike this { const data messages = thisstate return <div className="events"> <div className="demo"> <Dragger onDragStart=thishandleDragStart onDragEnter=thishandleDragEnter onDragging=thishandleDragging onDragLeave=thishandleDragLeave onDrop=thishandleDrop onDragEnd=thishandleDragEnd onDragEdge=thishandleDragEdge > <ul> data </ul> </Dragger> <div className="events-console" style= maxHeight: 300 overflowY: 'scroll' > messages </div> </div> </div> }}
Examples
git clone https://github.com/forcs/react-ant-dragger.gitcd react-ant-dragger# npm npm run examples:installnpm run examples # yarn yarn examples:installyarn examples