Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React DnD:使用IsDropDisabled禁用删除错误的元素类型_Javascript_Reactjs_React Beautiful Dnd - Fatal编程技术网

Javascript React DnD:使用IsDropDisabled禁用删除错误的元素类型

Javascript React DnD:使用IsDropDisabled禁用删除错误的元素类型,javascript,reactjs,react-beautiful-dnd,Javascript,Reactjs,React Beautiful Dnd,一段时间以来,我一直在努力寻找这个问题的答案,在图书馆里,我做得非常好。。。非常缺乏清晰的文档。一旦我对它有了清晰的理解,我希望能参与到改进中来 以下是我想要实现的目标 我有一个相当复杂的对象层次结构,多个可拖动类型可以在同一级别混合,其中一些甚至可以有相同可拖动的子对象 这使得“type”属性对我不起作用。我想将“IsDropDisabled”与“DragingOverWith”结合起来,使其成为现实,并管理其中的复杂性 基本上,我的想法是,当我当前拖动的项通过一个潜在的可拖放项时,我想根据类

一段时间以来,我一直在努力寻找这个问题的答案,在图书馆里,我做得非常好。。。非常缺乏清晰的文档。一旦我对它有了清晰的理解,我希望能参与到改进中来

以下是我想要实现的目标

我有一个相当复杂的对象层次结构,多个可拖动类型可以在同一级别混合,其中一些甚至可以有相同可拖动的子对象

这使得“type”属性对我不起作用。我想将“IsDropDisabled”与“DragingOverWith”结合起来,使其成为现实,并管理其中的复杂性

基本上,我的想法是,当我当前拖动的项通过一个潜在的可拖放项时,我想根据类型的“允许”数组检查类型,如果类型正确,则允许它

为此,我想从下拉列表中访问“snapshot.draggingOverWith”,但问题是。。。“IsDropDisabled”在代码层次结构的上面,所以我有点不知道库中的代码实际上是如何进行比较的

这个想法是这样的:

<Droppable droppableId={props.verticalgroup.id} isDropDisabled={() => {CompareTypes(snapshot.draggingOverWith, ['Type1', 'Type3'])}>
    {(provided, snapshot) => (
        <div
            {...provided.droppableProps}
            ref={provided.innerRef}
            className={snapshot.isDraggingOver ? 'changeBackground' : ''}
        >
            ...[Other Code]
        </div>
    )}
</Droppable>

{CompareTypes(snapshot.draggingOverWith,['Type1','Type3'])}>
{(已提供,快照)=>(
…[其他代码]
)}

谢谢您的帮助。

我想您可以尝试使用
DragDropContext
中的
onDragStart
方法,并将所需信息发送到Dropable,以便
isDropDisabled
有条件地工作

就像他们在这里做的一样

const[isDropDisabled,setIsDropDisabled]=useState(false);
const onDragStart=(任务)=>{
setIsDropDisabled(task.something==='xyz')//(
…[其他代码]
)}

工作正常。经过测试,它似乎不能与onBeforeCapture一起工作,而是与onDragStart一起工作。我很想知道发生这种事的背景是什么。onDragStart的缺点是更新需要几秒钟的时间,因此它有时会在某些嵌套组件上表现得异常。在DragEnd的末尾,我将所有连续isDropDisabled默认设置为true,并将其修复。最后,最好的方法。非常感谢。