0
votes

TouchableOpacity Onpress ne fonctionne pas lorsque vous essayez de définir un seul objet dans un dictionnaire d'objet

Je suis nouveau pour réagir et avoir essayé tout ce que je peux penser. J'ai cherché des threads similaires partout.

J'ai un dictionnaire d'objet avec 4 objets que je fais référence à une utilisation dans une rangée de 4 boutons touchable. Chaque bouton fait référence à un autre objet dans le dictionnaire et je veux onpresse pour définir l'état sur celui du bouton enfoncé. Un seul des quatre boutons doit pouvoir être sélectionné à un moment donné et le bouton sélectionné doit indiquer qu'il s'agit du bouton sélectionné.

Chaque fois que j'appuie sur l'un des boutons, je reçois cette erreur: SetState (...): Prend un objet de variables d'état à mettre à jour ou à une fonction qui renvoie un objet de variables d'état.

Je cours mon code localement en utilisant Expo ON mon Mac avec un simulateur iOS.

mon composant de ligne de boutons tactileOpacity

sollevelvel.js xxx

Je m'attends à l'état Pour être réglé sur celui du bouton que j'ai choisi et que le bouton choisi doit mettre à jour à partir de styles.btninactive à styles.btnactive .


0 commentaires

4 Réponses :


0
votes

manquant {} à partir du SETState et la valeur de la clé doit ressembler à ceci dans votre cas:

this.setstate ({FloorLevel: Floorlevel.Lower})

Mais je ne suis pas sûr à 100% de ce que vous attendez, car vous initiez le state.floorlevel avec un objet , je suppose que vous le modifiez à un chaîne .. pas sûr ..


1 commentaires

J'ai été confus sur la façon d'initier l'état de Floorlevel , et je ne suis toujours pas vraiment sûr de savoir comment je devrais initier l'état de Floorlevel . Si j'apprimiez l'état de plancher de plancher comme this.state = {sollevel} ou ceci.state = {solleLevel: {sollevel}} ou this.state = { Floorlevel: ''} , l'interface utilisateur fonctionne.



0
votes

La fonction setState prend un objet comme argument (l'état de votre composant est un objet). Donc, changez le code code sur olfress = {() => this.setstate ({sollevel: planchervel.upper})} . .

De même, vous voudrez modifier le code de balises pour avoir une vérification de style valide, comme si:

style = {this.state.floorlevel === (FlorideVelvel.upper)? styles.btnactive: styles.btninactive}

En outre, vous devez probablement changer le constructeur de votre composant, il s'agit actuellement d'initialiser de plancher avec un objet et lorsque vous appuyez sur une touche Floorlevel devient une chaîne.


1 commentaires

@Chasmall Vous devriez vraiment jeter un coup d'œil à votre constructeur, son état d'initialisation d'une manière problématique. Vérifiez la réponse de Vinod et peut-être initialiser votre état de la même manière.



0
votes

: HattiP: à @brunoeduardo pour m'aider à résoudre mon problème. Voici le nouveau code suivant ses étapes de résolution. xxx


0 commentaires

0
votes

Votre problème commence lorsque vous définissez l'état, comme par votre code, vous tirez dans l'objet entier dans l'objet et l'attribuez-lui le nom du parquet.

Si vous souhaitez modifier l'état sur Appuyez sur, puis comparez la valeur de l'état et faire des changements. Ci-dessous le code pourrait aider un peu p>

J'ai initialisé l'état avec un niveau (sous-sol) et l'intention de mettre à jour la même chose lorsque Onpresse () sera appelé P>

onPress={() => this.setState(level: floorLevel.Lower)


1 commentaires

Merci d'avoir pris le temps d'ajouter vos pensées. Bien que j'ai pu le faire fonctionner sans faire de votre changement recommandé, j'ai pris votre conseil et j'ai apporté un changement car votre suggestion est beaucoup plus propre et moins déroutante.