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 ...
随机推荐
- 文本分布式表示(三):用gensim训练word2vec词向量
今天参考网上的博客,用gensim训练了word2vec词向量.训练的语料是著名科幻小说<三体>,这部小说我一直没有看,所以这次拿来折腾一下. <三体>这本小说里有不少人名和一 ...
- HTTP 内容编码,也就这 2 点需要知道 | 实用 HTTP
Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报文头(Header)和实体组成.大多数 Http 协议的使用方式,都 ...
- MySQL视图简介与操作
1.准备工作 在MySQL数据库中创建两张表balance(余额表)和customer(客户表)并插入数据. create table customer( id int(10) primary key ...
- 如何利用HTTP缓存来加快你的网站应用
缓存在web环境各个环节都有实现,有CPU缓存.文件缓存.程序的Opcode缓存(APC,eAccelerator).内存缓存(Memcached,Redis).代理服务器(Nginx,Squid). ...
- Wolsey“强整数规划模型”经典案例之一单源固定费用网络流问题
Wolsey“强整数规划模型”经典案例之一单源固定费用网络流问题 阅读本文可以理解什么是“强”整数规划模型. 单源固定费用网络流问题见文献[1]第13.4.1节(p229-231),是"强整 ...
- 2018~第三届南宁市网络安全技术大赛~nnctf~write-up
Web 1.超简单 分值:100 类型:WEB 已解决 题目:超简单的web题 http://gxnnctf.gxsosec.cn:12311/ 代码审计 <?php $white_list ...
- (转)使用JMeter进行Web压力测试
使用JMeter进行压力测试 说到压力测试,一般第一反应都是LoadRunner.这个软件也确实是自动化测试的一个事实标准.无奈这个软件太过庞大,以及不能在MacOS上使用.我由于项目的需要,需要对一 ...
- 【带着canvas去流浪(6)】绘制雷达图
目录 一. 任务说明 二. 重点提示 三. 示例代码 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文 ...
- 数据库艰难求生之路(基础:创建数据库表格)part1
创建表格 1.创建表格之identity create table TableName( id ,), col_1 ), col_2 ) ) 这是一个简单的表格创建,identity这个是指在创建表 ...
- C#开发——网站应用微信登录开发
1. 在微信开放平台注册开发者账号,并有一个审核已通过的网站应用,并获得相对应的AppID和AppSecret,申请通过登陆后,方可开始接入流程. 2.微信OAuth2.0授权登录目前支持author ...