代码之家  ›  专栏  ›  技术社区  ›  Alexander Solonik

反作用dnd坎德罗普道具不转真但isover工作正常

  •  0
  • Alexander Solonik  · 技术社区  · 7 年前

    我的reactjs演示项目中有3个组件,我正在使用react DnD 组件。

    反应 DnD Examples 在这里.

    BX.JS

    import React, { Component } from 'react';
    import { DropTarget } from 'react-dnd';
    
    
    const boxTarget = {
        canDrop(props) {
            // alert()
        },
    
        drop(props) {
            // alert()
        }
    };
    
    function collect(connect, monitor) {
        return {
          connectDropTarget: connect.dropTarget(),
          isOver: monitor.isOver(),
          canDrop: monitor.canDrop()
        };
    }
    
    const ItemTypes = {
        CARD: 'card'
    };
    
    
    class Box extends Component {
    
        render() {
            const { connectDropTarget, isOver, canDrop } = this.props;
    
            return connectDropTarget(
              <div style={{
                position: 'relative',
                width: '200px',
                height: '200px',
                background: isOver ? '#ff0000' : '#eee'
              }}>
                  { this.props.children }
              </div>
            );
        }
    
    }
    
    export default DropTarget(ItemTypes.CARD, boxTarget, collect)(Box);
    

    J.J.

    import React, { Component } from 'react';
    import { DragSource } from 'react-dnd';
    
    
    const ItemTypes = {
        CARD: 'card'
    };
    
    const cardSource = {
        beginDrag(props) {
          return {  };
        },
    
        endDrag(props, monitor) {
          const item = monitor.getItem()
          const dropResult = monitor.getDropResult()
    
          if (dropResult) {
            alert(`You dropped ${item.name} into ${dropResult.name}!`)
          }
        },
    }
    
    function collect(connect, monitor) {
        return {
           connectDragSource : connect.dragSource(),
           connectDragPreview: connect.dragPreview(),
           isDragging : monitor.isDragging()
        } 
    }
    
    class Card extends Component {
    
        render() {
            const { connectDragSource , isDragging } = this.props;
    
            return connectDragSource( 
              <div style={{
                opacity : isDragging ? 0.5 : 1,
                height: '50px',
                width: '50px',
                backgroundColor: 'orange',
              }}>
                &#9822;
              </div>
            );
          }
    
    }
    
    export default DragSource(ItemTypes.CARD, cardSource , collect)(Card);
    

    simpledrag.js公司

    import React, { Component } from 'react';
    
    import { DragDropContext } from 'react-dnd';
    import HTML5Backend from 'react-dnd-html5-backend';
    import CARD from './card';
    import BOX from './box';
    import Calder from './fullcalender';
    
    class simpleDrag extends Component {
    
        render() {
            return(
                <div>
                    <BOX />
                    <CARD/>
                </div>    
            ); 
        }
    
    } 
    
    export default DragDropContext(HTML5Backend)(simpleDrag);
    

    simpleDrag.js 是同时显示box和card组件的父组件,现在我面临的问题是box.js我有以下三元样式检查:

    background: isOver ? '#ff0000' : '#eee'
    

    现在 isOver 这个样式起作用了,就是div变成了“ff0000”,但是这个检查不起作用 canDrop ,为什么 烛光 检查不工作?

    上面的代码可以在我的github repo中找到 HERE .

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ishwor Timilsina    7 年前

    你应该从返回true/false 烛光 里面 箱靶 在里面 BX.JS .