拖拽时 DataTransfer 的 setData 为什么在 onDragStart 里没生效?
我在 React 里做拖拽功能,想通过 setData 传一个自定义 ID,但 drop 的时候用 getData 拿不到值,一直是空字符串。是不是我写法有问题?
试过把 e.dataTransfer.dropEffect = 'move' 加上也没用,控制台也不报错,就是取不到数据。
const handleDragStart = (e, id) => {
e.dataTransfer.setData('text/plain', id);
};
const handleDrop = (e) => {
const id = e.dataTransfer.getData('text/plain');
console.log('dropped id:', id); // 这里总是空
};
dragover事件里阻止默认行为,浏览器默认是不允许 drop 的,所以 dataTransfer 数据被清空了。在 drop 目标元素上加上这个:
你检查一下有没有写
onDragOver事件处理,并且在里面调用e.preventDefault()。这个是必须的,否则浏览器默认行为会阻止 drop 事件正常触发,就算触发了getData也可能拿到空值。要这样写:
然后你的放置目标元素要绑定
onDragOver: