Partage
  • Partager sur Facebook
  • Partager sur Twitter

[ReactNative] Suppression d'un élément array

Problème de suppression setState

Sujet résolu
23 septembre 2020 à 10:37:34

Bonjour,  après des heures de recherche je me permets de poser mon problème sur le forum. 
Mon application est une sorte de quiz à choix multiple, je stock les réponse dans un tableau dans mon state (dataResponse) et je souhaite que lorsqu'un élément est toucher (pressRep) il soit ajouter, et si le même élément et re-troucher il soit supprimer. Dans ma fonction pressRep(rep), rep est la réponse (Pomme par exemple).

Quand je click une fois l'élément s'ajoute, un deuxième et un 3iem, parfait

Exemple :

Etape 1 : Array[]
Etape 2 : Array["Pomme"] 

...

Etape 3 : Array["Pomme","Banane","Poire"] ...

Cependant si je click sur l'élément "Banane" voici mon array : 

Etape 4 : Array["Banane"]

Et si je click ensuite sur "Pomme" : 


Etape 5 : Array["Pomme",Banane"] 

J'ai vérifier ma variable Rep est le bon élément toucher, l'index est aussi le bon dans le tableau donc je ne comprends pas d'ou vient le problème.. 

this.state = {
            dataResponse : [],
        };


pressRep = (rep) =>{
        if(!this.state.dataResponse.includes(rep)){
            this.setState({dataResponse : [...this.state.dataResponse,rep]})
        }else
            {
                index = this.state.dataResponse.indexOf(rep)
                tmp = this.state.dataResponse.splice(index,1)
                this.setState({dataResponse : tmp})
            }
      } 

Voila si vous avez besoin de précision ou autre n'hésitez pas, 
Merci d'avance pour vos retour ! 
  • Partager sur Facebook
  • Partager sur Twitter
25 septembre 2020 à 15:01:55

Je pense que le problème vient du this.state.dataResponse donc voici une solution qui fonctionne afin de garde le principe d'immutabilité.

array = [...this.state.dataResponse]
                index = this.state.dataResponse.indexOf(rep)
                array.splice(index,1)
                this.setState({dataResponse : array})



  • Partager sur Facebook
  • Partager sur Twitter
9 octobre 2020 à 13:24:14

Salut, merci pour votre aide j'avais le meme souci aussi.

-
Edité par AvensisDavid 21 janvier 2021 à 17:13:17

  • Partager sur Facebook
  • Partager sur Twitter