• 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);
    app
    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);
  • 相关阅读:
    四月⑨日
    4月⑦日
    4月6日
    四月⑧日
    第一天上课
    modelsim的do文件
    SCCB协议
    FPGA之VGA控制
    FPGA常用术语
    乘法器之六(硬件乘法器)
  • 原文地址:https://www.cnblogs.com/l8l8/p/10791651.html
Copyright © 2020-2023  润新知