React-dnd: كيف تعرف "هو السحب" داخل "هدف الإسقاط"؟

تم إنشاؤها على ١ فبراير ٢٠١٦  ·  4تعليقات  ·  مصدر: react-dnd/react-dnd

أريد إظهار أهداف الإسقاط عند سحب مصدر ما ، وإخفاء جميع الأهداف عندما لا يتم سحب أي شيء.
ومع ذلك فإن الشاشة isDragging متوفرة فقط للمصدر.
هل من طريقة لمعرفة isDragging داخل DropTarget ؟

question

التعليق الأكثر فائدة

نظرًا لأن المصدر مطلوب لإرجاع عنصر عند startDrag ، فقد قمت بتطبيق إصدار عمل 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.

نظرًا لأن المصدر مطلوب لإرجاع عنصر عند startDrag ، فقد قمت بتطبيق إصدار عمل 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 شكرا

بالنظر إلى الكود الخاص بك ، يمكنك تحديد وظيفة hover () داخل كائن widgetTarget الموجود لديك. سيحتوي على التوقيع hover(props, monitor, component) ، والذي يمكنك استخدامه كما يحلو لك.

يمكنك تحديد monitor.getItem() . إذا كان موجودًا ، فأنت تسحب. وإلا لا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات