Voici l'exemple de code que j'essaie d'utiliser, qui est react + TypeScript. onDragEnter et onDragOver fonctionnent correctement mais pas l'événement onDrop.
import * as React from 'react';
export class FileZone extends React.Component {
onDragOver = (e) => {
let event = e as Event;
event.stopPropagation();
}
onDragEnter = (e) => {
let event = e as Event;
event.stopPropagation();
}
onFileDrop = (e) => {
let event = e as Event;
event.stopPropagation();
console.log("onFileDrop");
alert("dropped")
}
render() {
return (
<div>
onDragEnter={this.onDragEnter}
onDragOver={this.onDragOver}
onDrop={this.onFileDrop}>
Drag and drop file here
</div>)
}
}
Enfin, j'ai eu le problème, pour une raison quelconque, je dois gérer le onDragOver comme ceci:
onDragOver = (e) => {
let event = e as Event;
event.stopPropagation();
event.preventDefault();
}
cela a résolu mon problème.
Il suffit d'empêcher l'événement ondragover par défaut, puis cela fonctionne.
onDragOver = (event) => {
event.preventDefault();
}
return (<div onDragOver={this.onDragOver} {...others}>{children}</div>);
Il y a un problème dans votre code, vous devez affecter un événement à div
render() {
return (
<div //you have to remove additional > from here
onDragEnter={this.onDragEnter}
onDragOver={this.onDragOver}
onDrop={this.onFileDrop}>
Drag and drop file here
</div>
)
}
onDrop={files => this.onFileDrop}>
Cela devrait devenir ceci:
onDrop={this.onFileDrop}>
Et comme vous utilisez 'this. "Pour appeler la fonction, vous en aurez besoin dans le constructeur:
constructor(props) {
super(props);
this.onFileDrop = this.onFileDrop.bind(this);
}
Une fonction:
onFileDrop(event) {
event.preventDefault();
console.log("qwerty")
}
Vous devez appeler la fonction pour la lancer (utilisez les parenthèses):
render() {
return (
<div>
onDragEnter={this.onDragEnter}
onDragOver={() => { return false }}
onDrop={files => this.onFileDrop()}> // you were missing the "()"
Drag and drop file here
</div>)
}
window.ondragover = function(e) { e.preventDefault(); return false };
window.ondrop = function(e) { e.preventDefault(); return false };