React-dnd: 如何知道`DropTarget`中的`isDragging`?

创建于 2016-02-01  ·  4评论  ·  资料来源: react-dnd/react-dnd

我想在拖动某些源时显示放置目标,而在不拖动任何内容时隐藏所有目标。
但是, isDragging监视器仅作为源提供。
以任何方式知道isDraggingDropTarget吗?

question

最有用的评论

由于在beginDrag时需要source返回项,因此我实现了isDragging的工作版本,如下所示:

import React from 'react';
import { ItemTypes } from '../../constants';
import { DropTarget } from 'react-dnd';

const widgetTarget = {
  drop(props) {
    // moveKnight(props.x, props.y);
  }
};

function collect(connect, monitor) {
  const item = monitor.getItem();
  return {
    connectDropTarget: connect.dropTarget(),
    isOver: monitor.isOver(),
    item: item,
    isDragging: !!item,
  };
}

@DropTarget(ItemTypes.WIDGET, widgetTarget, collect)
export default class WidgetHolder extends React.Component {
  render() {
    const {
      connectDropTarget,
      isDragging,
      isOver,
      item
    } = this.props;
    const style = {
      width: '100%',
      visibility: isDragging? 'visible': 'hidden',
      backgroundColor: isOver? 'green': 'inherit',
    };
    return connectDropTarget(
      <div style={style}>
        Drop here
      </div>
    );
  }
};

@wdhorton感谢您的参考示例。 我会踢的!

所有4条评论

我将检查Simple Sortable示例的源代码。 听起来您想要执行与他们在cardTarget中进行悬停类似的操作。

由于在beginDrag时需要source返回项,因此我实现了isDragging的工作版本,如下所示:

import React from 'react';
import { ItemTypes } from '../../constants';
import { DropTarget } from 'react-dnd';

const widgetTarget = {
  drop(props) {
    // moveKnight(props.x, props.y);
  }
};

function collect(connect, monitor) {
  const item = monitor.getItem();
  return {
    connectDropTarget: connect.dropTarget(),
    isOver: monitor.isOver(),
    item: item,
    isDragging: !!item,
  };
}

@DropTarget(ItemTypes.WIDGET, widgetTarget, collect)
export default class WidgetHolder extends React.Component {
  render() {
    const {
      connectDropTarget,
      isDragging,
      isOver,
      item
    } = this.props;
    const style = {
      width: '100%',
      visibility: isDragging? 'visible': 'hidden',
      backgroundColor: isOver? 'green': 'inherit',
    };
    return connectDropTarget(
      <div style={style}>
        Drop here
      </div>
    );
  }
};

@wdhorton感谢您的参考示例。 我会踢的!

查看您的代码,您可以在现有的widgetTarget对象中定义hover()函数。 它将具有签名hover(props, monitor, component) ,您可以根据需要使用。

您可以检查monitor.getItem() 。 如果存在,那么您正在拖动。 否则不行。

此页面是否有帮助?
0 / 5 - 0 等级