Maison >interface Web >js tutoriel >Pourquoi est-ce que je reçois l'erreur « Appel de hook invalide » dans mon application React ?

Pourquoi est-ce que je reçois l'erreur « Appel de hook invalide » dans mon application React ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-01 02:12:28738parcourir

Why am I getting the

Erreur d'appel de hook non valide dans React : un guide complet

Lorsque vous essayez d'afficher des données dans un tableau à l'aide de React, vous pouvez rencontrer l'erreur "Appel de hook invalide. Les hooks ne peuvent être appelés qu'à l'intérieur du corps d'un composant de fonction." Cette erreur se produit pour diverses raisons, et comprendre comment la résoudre est crucial pour le développement de React.

Causes de l'erreur

  1. Versions React incompatibles : Assurez-vous que vous disposez de la bonne version de React et du moteur de rendu associé installé. Des incohérences de version peuvent conduire à cette erreur.
  2. Violation des règles de hook : Les hooks React suivent des règles spécifiques, comme être invoqués uniquement dans des composants fonctionnels. Assurez-vous de respecter ces conventions.
  3. Instances React multiples : Vérifiez que vous n'avez qu'une seule instance de React dans votre application. Plusieurs instances peuvent provoquer des conflits et déclencher cette erreur.

Exemple avec Material-UI

Considérez l'exemple de code suivant :

<code class="javascript">import React, { Component } 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
  }
}));

class allowance extends Component {
  constructor() {
    super();
    this.state = {
      allowances: []
    };

  }

  componentWillMount() {
    fetch('http://127.0.0.1:8000/allowances')
      .then(data => {
        return data.json();
      })
      .then(data => {
        this.setState({
          allowances: data
        });
        console.log('allowance state', this.state.allowances);
      });
  }

  render() {
    const classes = useStyles();
    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> {
            this.state.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>

Solution

Dans cet exemple, l'erreur se produit car le composant est défini comme un composant de classe. Les hooks React, introduits dans les versions ultérieures de React, ne peuvent être utilisés que dans les composants fonctionnels. Pour résoudre le problème :

  1. Convertissez le composant de classe en composant fonctionnel.
  2. Utilisez des hooks au lieu de méthodes pour gérer l'état et effectuer des effets secondaires.

Assistance supplémentaire

Pour des conseils supplémentaires sur la correction de l'erreur « Appel de hook invalide » :

  • [Documentation React](https://reactjs.org/ docs/hooks-rules.html)
  • [Configuration déclarative](https://blog.logrocket.com/declarative-setup-of-front-end-typescript-and-react/)
  • [Commande alternative npm Link](https://blog.bitsrc.io/an-alternative-npm-link-command-a49f7a92bfd4)

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!

Déclaration:
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