J'apprends les bases de React et suis tombé sur ce défi qui m'a posé beaucoup de problèmes.
J'ai une liste d'éléments dans la fonction "état". Lorsque je les liste à l'écran, je voudrais lister ceux qui ont la valeur «found = 0». J'ai essayé de rechercher sur le Web, j'ai essayé d'appliquer tant de solutions différentes, y compris celles d'ici dans stackoverflow, mais j'ai continué à recevoir tellement d'erreurs différentes que je ne pouvais pas le faire fonctionner.
Voici ma fonction 'état' enregistrée dans mon fichier App.js:
render() {
return (
<div className="list-group">
<span className="font-weight-bold list-group-item list-group-item-action flex-column align-items-start">
{this.props.counter.title}
<span className="font-weight-normal text-secondary float-right">
{this.foundMessage()}
</span>
</span>
<div className="row">
<button
onClick={() => this.props.onFind(this.props.counter)}
className="btn btn-sm col-3 btn-primary col-6"
>
Found it!
</button>
<button
onClick={() => this.props.onDelete(this.props.counter.id)}
className="btn btn-danger btn-sm col-6"
>
No more needed!
</button>
</div>
</div>
);}}
Et voici le code counter.jsx qui affiche mes éléments:
state = {
counters: [
{ id: 1, title: "Soymilk", found: 1, value: 0 },
{ id: 2, title: "Mushroom", found: 0, value: 0 },
{ id: 3, title: "Tomatoes", found: 1, value: 0 },
{ id: 4, title: "Potatoes", found: 0, value: 0 },
{ id: 5, title: "Meat", found: 0, value: 0 },
{ id: 6, title: "Beans", found: 0, value: 0 },
{ id: 7, title: "Bread", found: 0, value: 0 }
]};
4 Réponses :
Vous pouvez utiliser la fonction filter du tableau. Comme ceci
var ages = [32, 33, 16, 40];
checkObj = (obj) => {
return obj > 16;
}
let val = ages.filter(checkObj)
//val contains the filtered array with found == 0
// or you can use this way
let val = this.state.counters.filter((obj)=>{
return obj.found == 0;
})
J'espère que ça aide, si je ne comprends pas votre problème. Veuillez répondre
Vous pouvez filtrer vos données,
comme ceci,
let filteredData= this.state.counters.filter(item=>item.found==0);
this.setState({counters:filteredData});
vous pouvez utiliser la fonction de carte qui renvoie un nouveau tableau avec une opération se déroulant dans son rappel pour chaque élément.
function filterCounters(){
let newCounters = [];
counter.map(element=>{
if(element.found === 0 ){
newCounters.push(element);
}
})
return newCounters;
}
Vous pouvez utiliser les méthodes Array .filter et .map , mais ce n'est pas le seul moyen.
Voici un exemple qui fait exactement ce dont vous avez besoin.
L'utilisation simultanée de la carte et du filtre m'a beaucoup aidé à comprendre. Merci beaucoup!
Je vous en prie! Je vous encourage à utiliser la carte, filtrer et réduire autant que possible.