gpt4 book ai didi

reactjs - Monitor.getDropResult() 返回 null

转载 作者:行者123 更新时间:2023-12-03 13:17:01 24 4
gpt4 key购买 nike

monitor.getDropResult() 返回 null (我看它是 console.log)。它应该返回对象(拖动的项目)及其位置。为什么返回null?

我用 DragSource,DropTarget 为我的组件签名..但它仍然返回 null

这是我的整个组件代码:

import React, { PropTypes } from 'react';
import { DragSource } from 'react-dnd';
import { getEmptyImage } from 'react-dnd-html5-backend';

import { StoneConstants, StoneTypes, ItemTypes } from 'constants/AppConstants';
import OkeyStoneBase from 'components/OkeyStoneBase/OkeyStoneBase';

import './_OkeyStone.scss';

function checkForDragAction(props) {

// TODO receive the action via prop
if (props.stoneType === StoneTypes.ON_WITHDRAW_MIDDLE) {
props.onWithdrawMiddle();
} else if (props.stoneType === StoneTypes.ON_DISCARD_WEST) {
props.onWithdrawLeft();
}
}

function applyDropResult(props, result) {

if (props.stoneType === StoneTypes.ON_WITHDRAW_MIDDLE || props.stoneType === StoneTypes.ON_DISCARD_WEST) {
if (result === null) { //taşı tahtaya koymadıysa

}
props.withdrawRequestAtPosition(result.top, result.left);
}

if (props.stoneType === StoneTypes.ON_RAKE) {
if (result && result.stackType === StoneTypes.ON_DISCARD_SOUTH) {
props.onDiscardStone({
id: props.id,
number: props.number,
color: props.color
});
}
}
}

const stoneSource = {
canDrag(props) {
return props.draggable;

},

beginDrag(props) {
if (props.onBeginDrag) {
props.onBeginDrag();
}

checkForDragAction(props);
return {
id: props.id,
stoneType: props.stoneType,
left: props.left,
top: props.top,
color: props.color,
number: props.number
};
},

endDrag(props, monitor) {
if (props.onEndDrag) {
props.onEndDrag();
}
console.log(props.onEndDrag);
console.log(monitor);

***var result = monitor.getDropResult();***
console.log('stoneSource'+result);

applyDropResult(props, result);
}
};

function collect(connect, monitor) {
return {
connectDragSource: connect.dragSource(),
connectDragPreview: connect.dragPreview(),
isDragging: monitor.isDragging()
};
}

function getStyles(props) {
const scale = StoneConstants.MINI_SCALE;
let { left, top, isDragging, isMini } = props;
const { zIndex } = props;
const { canTransition } = props;

let transform = `translate3d(${left}px, ${top}px, 0)`;

if (isMini) {
transform += ` scale(${scale}, ${scale})`;
}

let result = {
transformOrigin: 'top left',
transform: transform,
WebkitTransform: transform,

zIndex: zIndex,
opacity: isDragging ? 0 : 1,
height: isDragging ? 0 : ''
};

if (isDragging || !canTransition) {
result.transition = 'none';
}

return result;
}

class OkeyStone extends React.Component {

handleStoneClick (e) {
const { id, onClicked } = this.props;
if (onClicked) {
e.stopPropagation();
onClicked(id);
}
}

componentDidMount() {
this.props.connectDragPreview(getEmptyImage(), {
captureDraggingState: true
});
}

render() {
let { connectDragSource } = this.props;
let { number, color } = this.props;
let { isStable, isSelected } = this.props;

let stableStyle = isStable ? 'okey-stone-stable' : '';

return connectDragSource(
<div className={'okey-stone-parent ' + stableStyle}
onClick={this.handleStoneClick}
style={getStyles(this.props)}>
<OkeyStoneBase number={number} color={color} isSelected={isSelected}/>
</div>
);
}
}

OkeyStone.propTypes = {
connectDragSource: PropTypes.func,
connectDragPreview: PropTypes.func,
isDragging: PropTypes.bool,
id: PropTypes.number,
left: PropTypes.number,
top: PropTypes.number,
stoneType: PropTypes.string,
isStable: PropTypes.bool,
isMini: PropTypes.bool
};

export default DragSource(ItemTypes.STONE, stoneSource, collect)(OkeyStone);

最佳答案

您需要创建一个 DropTarget 并在其源中定义一个 drop() 函数,返回的任何内容都将是 DragSource 的 endDrag() 函数内的 Monitor.getDropResult() 函数返回的内容(根据http://gaearon.github.io/react-dnd/docs-drag-source-monitor.html) )。我不确定您希望组件本身是什么样子,但如果您创建了一个带有类似于以下放置函数的 DropTarget:

const stoneDropSource = {
drop(props, monitor) {
return monitor.getItem();
},
}

这就是您在 endDrag() 函数中调用 getDropResult() 时收到的结果。

关于reactjs - Monitor.getDropResult() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39248607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com