0
votes

JavaScript réagit: appuyez sur une matrice en usestate

J'essaie de stocker une gamme de chaînes dans l'objet State sous la clé de Menuhistory , je l'initialise avec "Premier", lorsque la page change Props.Location Les mises à jour, qui déclenchent l'UseEffect () où j'essaie ensuite de pousser l'emplacement dans le tableau.

L'erreur que je reçois est .. xxx xxx


0 commentaires

3 Réponses :


2
votes

PUSH CODE> renvoie un index d'élément, utilisez la matrice Spread to Ajouter l'élément:

setState(state => ({menuHistory: [...state.menuHistory, location]}));


2 commentaires

L'erreur a changé en `( argument de type '(State: {Menuhistory: chaîne [];}) => Void' n'est pas assignable au paramètre de type 'Setstateaction <{Menuhistory: String [];}> '. TYPE' (Etat: {Menuhistory: String [];}) => VIDID 'n'est pas assignable à taper' (prevstate: {Menuhistory: string [];}) => {Menuhistory: String [];} '. Tapez 'void' n'est pas assignable à taper '{Menuhistory: chaîne [];}'. TS (2345) `


@Bill j'ai mis à jour la réponse pour renvoyer l'objet correctement.



2
votes

Comme @Clarity a déclaré, poussant code> retourne l'index de l'élément poussé, également cet opérateur mutait un objet. La meilleure pratique consiste à créer un autre tableau (par exemple, en répandant une valeur précédente, comme suggérées), et ajoutez une nouvelle entrée là-bas, comme:

setState({menuHistory: [...state.menuHistory, location]});


0 commentaires

0
votes

Vous avez défini {Menuhistory: ['Premier']} qui est une matrice. Essayez d'utiliser CONCAT au lieu de pousser.

   setState({menuHistory: state.menuHistory.concat(location)});


0 commentaires