Maison > interface Web > js tutoriel > le corps du texte

Pourquoi est-ce que je reçois une erreur « Invalid Hook Call » dans mon composant React et comment puis-je la corriger ?

Mary-Kate Olsen
Libérer: 2024-11-08 00:35:03
original
966 Les gens l'ont consulté

Why am I getting an

Résolution de l'erreur « Appel de hook invalide » dans le composant React

Les hooks React offrent un moyen puissant d'interagir avec l'état du composant, mais ils viennent avec certaines règles à respecter. Une erreur courante qui peut survenir est « Appel de hook non valide ». Cela se produit lorsque les hooks sont appelés en dehors du corps d'un composant de fonction.

Causes de l'erreur :

  1. Versions React incompatibles : Assurez-vous d'avoir des versions compatibles de React et du moteur de rendu (par exemple, React DOM).
  2. Règles de rupture : Les hooks doivent être appelés dans le même ordre pendant chaque cycle de rendu et ne peuvent pas être appelés à l'intérieur. instructions ou boucles conditionnelles.
  3. Instances multiples de React : Vérifiez qu'il n'y a qu'une seule copie de React dans l'application.

Dépannage du problème :

Dans l'exemple de code fourni, le problème peut être attribué à la méthode componentWillMount du composant de classe. Les hooks React ne sont pas pris en charge dans les composants de classe.

Solution :

Pour résoudre ce problème et utiliser des hooks, le composant doit être converti en composant fonctionnel. Voici le code mis à jour :

import React, { useState, useEffect } 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 [allowances, setAllowances] = useState([]);
  const classes = useStyles();

  useEffect(() => {
    fetch('http://127.0.0.1:8000/allowances')
      .then(data => data.json())
      .then(data => setAllowances(data));
  }, []);

  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;
Copier après la connexion

Remarque supplémentaire :

Dans certains cas, le problème peut également être dû à l'utilisation d'une version obsolète des scripts de réaction. La mise à jour de la version vers la dernière version pourrait potentiellement résoudre le problème.

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