Maison > interface Web > js tutoriel > Pourquoi est-ce que je reçois l'erreur « Appel de hook invalide » dans React et comment puis-je la corriger ?

Pourquoi est-ce que je reçois l'erreur « Appel de hook invalide » dans React et comment puis-je la corriger ?

Susan Sarandon
Libérer: 2024-11-02 15:46:02
original
894 Les gens l'ont consulté

Why am I getting the

Appel de hook invalide dans React : comprendre le problème et la résolution

L'erreur « Appel de hook invalide. Les hooks ne peuvent être appelés qu'à l'intérieur du corps d'un composant de fonction » se produit lorsque les hooks sont invoqués de manière incorrecte dans une application React. Cette erreur se produit généralement pour l'une des raisons suivantes :

  • Les versions de React et de rendu ne correspondent pas : Assurez-vous que les versions de React et du moteur de rendu (telles que React DOM) sont alignées.
  • Enfreindre les règles des hooks : Respectez les directives d'utilisation des hooks dans les composants de fonction, par exemple en appelant les hooks uniquement à l'intérieur des composants fonctionnels et en évitant de les appeler plus d'une fois par composant.
  • Copies multiples de React : Évitez d'avoir plusieurs instances de React dans une seule application, ce qui peut entraîner des conflits.

Dans l'extrait de code fourni, l'erreur se produit car des hooks (en particulier le hook useState) sont utilisés dans un composant de classe. Ceci est incorrect car les hooks sont exclusivement conçus pour être utilisés dans des composants fonctionnels.

Pour résoudre le problème, le code doit être réécrit en tant que composant fonctionnel, comme indiqué ci-dessous :

<code class="javascript">import React, { useState } from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Table from '@material-ui/core/Table';
import TableBody from '@material-ui/core/TableBody';
import TableCell from '@material-ui/core/TableCell';
import TableHead from '@material-ui/core/TableHead';
import TableRow from '@material-ui/core/TableRow';
import Paper from '@material-ui/core/Paper';

const useStyles = makeStyles(theme => ({
  root: {
    width: '100%',
    marginTop: theme.spacing(3),
    overflowX: 'auto'
  },
  table: {
    minWidth: 650
  }
}));

const Allowance = () => {
  const classes = useStyles();
  const [allowances, setAllowances] = useState([]);

  const fetchAllowances = async () => {
    const res = await fetch('http://127.0.0.1:8000/allowances');
    const data = await res.json();
    setAllowances(data);
  };

  useEffect(() => {
    fetchAllowances();
  }, []);

  return (
    <Paper className={classes.root}>
      <Table className={classes.table}>
        <TableHead>
          <TableRow>
            <TableCell>Allow ID</TableCell>
            <TableCell align="right">Description</TableCell>
            <TableCell align="right">Allow Amount</TableCell>
            <TableCell align="right">AllowType</TableCell>
          </TableRow>
        </TableHead>
        <TableBody>
          {allowances.map(row => (
            <TableRow key={row.id}>
              <TableCell component="th" scope="row">
                {row.AllowID}
              </TableCell>
              <TableCell align="right">{row.AllowDesc}</TableCell>
              <TableCell align="right">{row.AllowAmt}</TableCell>
              <TableCell align="right">{row.AllowType}</TableCell>
            </TableRow>
          ))}
        </TableBody>
      </Table>
    </Paper>
  );
};

export default Allowance;</code>
Copier après la connexion

En convertissant du composant à un composant fonctionnel, le hook peut être correctement utilisé, résolvant ainsi l'erreur « Appel de hook invalide ».

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal