J'ai ce code suivant:
renderPosts() {
return _.map(this.state.catalogue, (catalogue, key) => {
return (
<div className="item col-md-3" key={key} id={key}>
<img src={this.state.catalogue[key].avatarURL} height={150} with={150}/>
<h3>{catalogue.marque}</h3>
<h4>{catalogue.numero}</h4>
<h4>{catalogue.reference}</h4>
<p>{catalogue.cote}</p>
<div className="text-center">
<button className="btn btn-danger" onClick={() => {if(window.confirm('Delete the item?')){this.removeToCollection.bind(this, key)};}}>Supprimer</button>
</div>
</div>
)
})
}
Et j'ai aussi cette fonction:
removeToCollection(key, e) {
const item = key;
firebase.database().ref(`catalogue/${item}`).remove();
}
Lorsque j'utilise la fonction sans fenêtre de confirmation dans mon bouton "onclick", le code fonctionne très bien. Mais lorsque je souhaite utiliser une fenêtre de confirmation, la fenêtre de confirmation s'affiche lorsque je clique sur mon bouton, mais mon article n'est pas supprimé.
Une idée ?
Merci pour votre aide!
Fondamentalement, vous liez la fonction au lieu de l'appeler ... vous devez lier au préalable, de préférence dans le constructeur ... puis l'appeler. Essaye ça:
renderPosts() {
this.removeToCollection = this.removeToCollection.bind(this);
return _.map(this.state.catalogue, (catalogue, key) => {
return (
<div className="item col-md-3" key={key} id={key}>
<img src={this.state.catalogue[key].avatarURL} height={150} with={150}/>
<h3>{catalogue.marque}</h3>
<h4>{catalogue.numero}</h4>
<h4>{catalogue.reference}</h4>
<p>{catalogue.cote}</p>
<div className="text-center">
<button className="btn btn-danger" onClick={() => {if(window.confirm('Delete the item?')){this.removeToCollection(key, e)};}}>Supprimer</button>
</div>
</div>
)
})
}
Vous êtes juste une fonction de liaison et ne l'appelez pas.
Le bon synatx à utiliser bind
et appelé la fonction bind
ed.
if (window.confirm("Delete the item?")) {
let removeToCollection = this.removeToCollection.bind(this, 11);//bind will return to reference to binded function and not call it.
removeToCollection();
}
OU vous pouvez faire comme ça aussi sans lier.
if (window.confirm("Delete the item?")) {
this.removeToCollection(11);
}
Si cela est un problème à l'intérieur de removeToCollection
alors utilisez arrow function
pour le définir.
removeToCollection=(key)=> {
console.log(key);
}
Travail codesandbox demo
J'ai fait la même chose que ci-dessous-
J'ai un composant intelligent (classe)
<Link to={`#`} onClick={() => {if(window.confirm('Are you sure to delete this record?')){ this.deleteHandler(item.id)};}}> <i className="material-icons">Delete</i> </Link>
J'ai défini une fonction pour appeler le point de terminaison de suppression as-
deleteHandler(props){
axios.delete(`http://localhost:3000/api/v1/product?id=${props}`)
.then(res => {
console.log('Deleted Successfully.');
})
}
Et cela a fonctionné pour moi!