J'essaie de stocker une gamme de chaînes dans l'objet State sous la clé de L'erreur que je reçois est .. p> Menuhistory code>, je l'initialise avec "Premier", lorsque la page change Props.Location Code> Les mises à jour, qui déclenchent l'UseEffect () où j'essaie ensuite de pousser l'emplacement dans le tableau.
3 Réponses :
PUSH CODE> renvoie un index d'élément, utilisez la matrice Spread to Ajouter l'élément: setState(state => ({menuHistory: [...state.menuHistory, location]}));
L'erreur a changé en `( li> 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.
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]});
Vous avez défini {Menuhistory: ['Premier']} qui est une matrice. Essayez d'utiliser CONCAT au lieu de pousser.
setState({menuHistory: state.menuHistory.concat(location)});