很抱歉可能将此用作更多帮助论坛,但尽管付出了很大努力,但在此用例中我无法从 DropTarget 获得任何响应。
我想使用一系列可以将放置事件注册到自己的“类别卡”。
我在这里有什么明显的错误吗?
我可以确认 DragSource 函数正在工作,但我从 DropTarget 规范函数中记录的任何内容都没有进入控制台,就好像它们完全没有应用一样。
import React, { Component } from 'react'
import { DropTarget, DragSource } from 'react-dnd'
import _ from 'lodash'
export const ItemTypes = {
CATEGORY: 'category-item'
}
class CategoryTreeFork extends Component {
componentWillReceiveProps = (nextProps) => {
console.log("Next cat props", nextProps)
}
render(){
var { thisCat, childCat, level, dropEvent } = this.props
const { connectDragSource, connectDropTarget, isDragging, isOver } = this.props
return connectDragSource(
<div className="category-tree-fork">
<div className={`category-list-item level-${level}`}
style={{
opacity: isDragging ? 0.5 : 1,
backgroundColor: isOver ? "red" : "silver"
}}>
{thisCat.name}
</div>
</div>
)
}
}
/* get dragged */
const sourceSpec = {
beginDrag(props){
return { category_id: props.thisCat.category_id }
}
}
const sourceCollect = (connect, monitor) => {
return {
connectDragSource: connect.dragSource(),
isDragging: monitor.isDragging()
}
}
/* get dragged onto */
const targetSpec = {
drop(props, monitor, component) {
const item = monitor.getItem()
console.log("me or my friend?", item)
},
hover(props, monitor, component){
console.log("yo what you hoverin there for homie?")
}
}
const targetCollect = (connect, monitor) => {
return {
connectDropTarget: connect.dropTarget(),
isOver: monitor.isOver()
}
}
export default _.flow([
DragSource(ItemTypes.CATEGORY, sourceSpec, sourceCollect),
DropTarget(ItemTypes.CATEGORY, targetSpec, targetCollect)
])(CategoryTreeFork)
DX 没关系,之后才意识到我忘记在渲染上调用 connectDropTarget。 这是修复:
return connectDropTarget(connectDragSource(
<div className="category-tree-fork">
<div className={`category-list-item level-${level}`}
style={{
opacity: isDragging ? 0.5 : 1,
backgroundColor: isOver ? "red" : "silver"
}}>
{thisCat.name}
</div>
</div>
这解决了我刚才的问题。 遵循“简单”、可排序的示例并做了双重装饰器,但没有应用connectDropTarget
对于来自搜索引擎的人,正在寻找一种在同一组件上使用 DragSource 和 DropTarget 而不使用_.flow
的方法,您可以这样做:
export default
DragSource(typeA, specA, collectA)(
DropTarget(typeB, specB, collectB)(
Component));
最有用的评论
对于来自搜索引擎的人,正在寻找一种在同一组件上使用 DragSource 和 DropTarget 而不使用
_.flow
的方法,您可以这样做: