react dnd demo
target
import React ,{ Component } from 'react';
import { DropTarget } from 'react-dnd';
import Item from '../components/Item';
import styles from './IndexPage.css';
const boxTarget = {
// 当有对应的 drag source 放在当前组件区域时,会返回一个对象,可以在 monitor.getDropResult() 中获取到
drop(props, monitor, component) {
console.log(monitor.didDrop());
const { key } = monitor.getItem();
// props.handDrop(key);
},
hover(props, monitor, component) {
return monitor.isOver({ shallow: true })
},
canDrop(props, monitor) {
return monitor.getItem();
}
}
function collect ( connect, monitor) {
return {
connectDropTarget: connect.dropTarget(),
hovered: monitor.isOver(),
canDrop: monitor.canDrop(),
item: monitor.getItem(),
};
}
class Target extends Component {
render(){
const { connectDropTarget, hovered, arr, canDrop, item ,handDrop } = this.props;
console.log(this.props);
const backgroundColor = hovered ? 'lightgreen' : 'white';
const isActive = canDrop && hovered;
// if ( isActive && item) {
// handDrop(item.key);
// }
return connectDropTarget(
<div className={styles.target} style={{background:backgroundColor}}>
target
{arr.map(item => <Item key={item.key} item={item}/>)}
</div>
);
}
}
export default DropTarget('item', {}, collect)(Target);
item
import React,{ Component } from 'react';
import { DragSource } from "react-dnd";
const itemSoure = {
beginDrag(props) {
return props.item;
},
endDrag(props,monitor,component) {
if (!monitor.didDrop()) {
return;
}
return props.handDrop(props.item.key)
// const item = monitor.getItem()
// // 拖拽元素放下时,drop 结果
// const dropResult = monitor.getDropResult()
// console.log(dropResult);
// if (props.handDrop) {
// } else {
// return ;
// }
}
};
function collect (connect, monitor){
return {
connectDragSource: connect.dragSource(),
connectDragPreview: connect.dragPreview(),
isDragging: monitor.isDragging()
};
}
class Item extends Component {
render(){
const { text, isDragging,connectDragSource, item} = this.props;
return connectDragSource(
<div className={{}}>
{item.text}
</div>
)
}
}
Item.propTypes = {
};
export default DragSource('item',itemSoure, collect)(Item);
import React, { Component } from 'react';
import { connect } from 'dva';
import HTML5Backend from 'react-dnd-html5-backend';
import { DragDropContext } from 'react-dnd';
import styles from './IndexPage.css';
import Item from '../components/Example';
import Target from './Target';
class App extends Component {
state = {
list : [
{key: 0, text: 'text1'},
{key: 1, text: 'text2'},
{key: 2, text: 'text3'},
{key: 3, text: 'text4'}
],
arr:[]
}
deleteitem = key => {
const { list } = this.state;
// this.setState({
// list: list.filter( item => item.key !== key)
// })
this.setState( preState => {
let items = preState.list;
const index = items.findIndex(item => item.key === key);
items.splice(index,1);
return {items};
})
}
additem = key => {
this.setState( preState => {
const arr = preState.arr;
let list = preState.list;
const index = list.findIndex(item => item.key === key);
arr.push(list[index]);
list.splice(index,1);
return {list,arr};
})
}
additems = key => {
this.setState( preState => {
const arr = preState.arr;
let list = preState.list;
const index = arr.findIndex(item => item.key === key);
list.push(list[index]);
arr.splice(index,1);
return {list,arr};
})
}
render(){
return (
<div className={styles.normal}>
<header>
demo
</header>
<div>
{this.state.list.map(item => <Item key={item.key} item={item} handDrop={(key) => (this.additem(key))}/>)}
</div>
<Target arr={this.state.arr} />
</div>
);
}
}
export default DragDropContext(HTML5Backend)(App);
react dnd demo的更多相关文章
- 从DOM操作看Vue&React的前端组件化,顺带补齐React的demo
前言 接上文:谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo 上次写完博客后,有朋友反应第一内容有点深,看着迷迷糊糊:第二是感觉没什么使用场景,太过业务化,还不如直接写Vue ...
- 强大的拖拽组件:React DnD 的使用
强大的拖拽组件:React DnD 的使用 react.js 10.6k 次阅读 · 读完需要 25 分钟 17 文章首发我的个人blog : 原文链接 学习 React DnD 的最初原因是阅读 ...
- 谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo
前言 前端已经过了单兵作战的时代了,现在一个稍微复杂一点的项目都需要几个人协同开发,一个战略级别的APP的话分工会更细,比如携程: 携程app = 机票频道 + 酒店频道 + 旅游频道 + ..... ...
- 我的第一个 react redux demo
最近学习react redux,先前看过了几本书和一些博客之类的,感觉还不错,比如<深入浅出react和redux>,<React全栈++Redux+Flux+webpack+Bab ...
- react基本demo详解
一.react的优势 1.React速度很快:它并不直接对DOM进行操作,引入了一个叫做虚拟DOM的概念,安插在javascript逻辑和实际的DOM之间,性能好. 2.跨浏览器兼容:虚拟DOM帮助我 ...
- rails下react的demo
gemfile gem 'react-rails' gen一下 react:install 创建组件 react:component MyComponent name:string age:int v ...
- react dnd demo2
import React, { Component } from 'react'; import './App.css'; import Card from './Card'; import HTML ...
- react购物车demo
import React, { Component } from 'react'; import './App.css'; import {connect} from 'react-redux'; i ...
- React Native DEMO for Android
Demo1: 主要知识:navigator,fecth 地址:https://github.com/hongguangKim/ReactNativeDEMO1 Demo2: 主要知识:navigato ...
随机推荐
- Nginx的配置文件nginx.conf解析
安装openresty的nginx.conf配置文件 0.ng运行的用户和用户组 1.ng进程数,设置为CPU总核心数 2.ng错误日志 3.进程文件,有时ng启动不了,将进程文件删除即可. 4.单进 ...
- Python爬虫入门教程 41-100 Fiddler+夜神模拟器+雷电模拟器配置手机APP爬虫部分
爬前叨叨 从40篇博客开始,我将逐步讲解一下手机APP的爬虫,关于这部分,我们尽量简化博客内容,在这部分中可能涉及到一些逆向,破解的内容,这部分尽量跳过,毕竟它涉及的东西有点复杂,并且偏离了爬虫体系太 ...
- UmengShareDemo【友盟分享SDK集成,基于V6.9.3版本】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里简单记录下友盟分享SDK集成的步骤. 如果想要使用自定义分享对话框实现,请参考<ShareDialogDemo[分享对话框 ...
- Egg.js 中入参的校验
日常作业中免不了频繁处理 GET/POST 的入参,你当然可以每个 action 中都重复地去做这些事情, 从 query 或 body 取出入参, 对可选的入参进行判空, 处理入参的类型转换, 对入 ...
- java实现 批量转换文件编码格式
一.场景说明 不知道大家有没有遇到过之前项目是GBK,现在需要全部换成UTF-8的情况.反正我是遇到了. eclipse可以改变项目的编码格式,但是文件如果直接转换的话里面的中文就会全部乱码,需要先复 ...
- 20190423-Vscode与Sass不得不说的秘密(>^ω^<)
这是乱七八糟的前言:emmm,今天倔强的点,是关于Vscode使用easySass插件时,不安装ruby环境,直接使用插件编译时,不进行设置,分音是会转译为Css文件的= =,神坑的后知后觉才发现是因 ...
- SpringIOC/DI(2)
2019-03-08/09:24:37 开发环境:IDEA 1.创建Spring项目 File--New--project--Spring--Creat empty Spring-config.xml ...
- Apache2配置多域名站点及支持https
0x00 预备条件 申请SSL证书 建立对应站点目录 开放443端口 0x01 配置sites-available文件 执行 vi /etc/apache2/sites-available/zecoc ...
- 【设计模式】简单工厂模式 Simple Factory Pattern
简单工厂模式Simple Factory Pattern[Simple Factory Pattern]是设计模式里最简单的一个模式,又叫静态工厂模式[Static Factory Pattern], ...
- 基于python的种子搜索网站-开发过程
本讲会对种子搜索网站的开发过程进行详细的讲解. 源码地址:https://github.com/geeeeeeeek/bt 项目开发过程 项目简介 该项目是基于python的web类库django开发 ...