85 votes

React Hooks Erreur : Les crochets ne peuvent être appelés qu'à l'intérieur du corps d'un composant de fonction.

J'obtiens cette erreur lorsque j'utilise le useState crochet. Je l'ai dans sa forme de base, en regardant le docs sur les réacteurs pour une référence, mais je reçois toujours cette erreur. Je suis prêt pour le moment de la paume de la main...

export function Header() {
  const [count, setCount] = useState(0)
  return <span>header</span>
}

2 votes

Cela fonctionne pour moi... aucune erreur... avez-vous mis à jour vers la 16.7 ?

0 votes

Oui, je l'ai fait. Je pense que ça a peut-être quelque chose à voir avec ma configuration, mais je ne sais pas quoi. Eventuellement, si j'utilise ce même crochet en haut du composant function App, j'obtiens la même erreur.

0 votes

Hmmm... tout ce que j'ai fait c'est npx create-react-app newhook et ensuite yarn add react@next et react-dom@next et ça a bien marché....

2voto

Marcelo Cardoso Points 71

Pour ceux qui rencontrent ce problème lors de l'utilisation de MobX et de l'enveloppement d'un composant avec un observer assurez-vous d'utiliser mobx-react-lite au lieu de mobx-react .

MISE À JOUR DU 29 MAI

De mobx-react 6.0.0 à l'avenir, les composants basés sur des crochets sont désormais pris en charge par mobx-react Il n'y a donc pas besoin de mobx-react-lite plus d'utilisation (si c'était votre problème).

1voto

Chance Eakin Points 56

J'ai trouvé cette solution de contournement pour react-hot-loader tandis que le PR pour le réparer est entrant.

Enveloppez la fonction qui appelle les crochets dans un fichier React.memo empêchant ainsi un rechargement à chaud s'il est inchangé.

const MyFunc = React.memo(({props}) => {...

Crédit pour la solution : https://github.com/gatsbyjs/gatsby/issues/9489

1voto

Paul Berg Points 567

Pour les autres utilisateurs d'espaces de travail en fil, voici ma situation et comment je l'ai résolue.

  • paquets
    • foo
      • react@16.8.6
    • bar
      • react@16.10.1

Les documents de Facebook sur Avertissement d'appel crochet non valide ne disent rien à propos des espaces de travail de yarn, donc j'ai supposé que ma configuration était correcte. Mais ce n'était pas le cas. Vous pouvez corriger l'erreur seulement en utilisant la même version à travers tous vos paquets .

Dans l'exemple ci-dessus, vous devez faire passer la version de react de "foo" à 16.10.1, afin qu'elle corresponde à la version de react de "bar".

Bonus : voir cette discussion sur GitHub pour une belle collection de bagages émotionnels déchargés sur Internet.

1voto

Pranay Dutta Points 1455

Dans mon cas, j'appelais useSelector dans useEffect ! !!

0voto

Kartik_Agarwal Points 1

Si vous utilisez Create React App, vous devez mettre à jour "react-scripts" également avec la version de react et react-dom.

 "react-scripts": "2.1.5",
 "react": "^16.8.1",
 "react-dom": "^16.8.1",

cette combinaison fonctionne bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X