React コンポーネントで「無効なフック呼び出し」エラーが発生するのはなぜですか?どうすれば修正できますか?

Mary-Kate Olsen
リリース: 2024-11-08 00:35:03
オリジナル
972 人が閲覧しました

Why am I getting an

React コンポーネントの「無効なフック呼び出し」エラーを解決する

React フックはコンポーネントの状態を操作する強力な方法を提供しますが、従わなければならない特定のルールがあります。発生する可能性のある一般的なエラーの 1 つは、「無効なフック呼び出し」です。これは、フックが関数コンポーネントの本体の外部で呼び出されたときに発生します。

エラーの原因:

  1. React バージョンの不一致: React とレンダラー (React DOM など) のバージョンに互換性があることを確認してください。
  2. フックのルール違反: フックは各レンダリング サイクル中に同じ順序で呼び出す必要があり、内部で呼び出すことはできません。条件ステートメントまたはループ。
  3. React の複数のインスタンス: アプリケーション内に React のコピーが 1 つだけあることを確認します。

問題のトラブルシューティング:

提供されたコード例では、問題はクラス コンポーネントのcomponentWillMount メソッドに遡ることができます。 React フックはクラス コンポーネントではサポートされていません。

解決策:

この問題を解決してフックを使用するには、コンポーネントを機能コンポーネントに変換する必要があります。更新されたコードは次のとおりです:

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;
ログイン後にコピー

追加メモ:

場合によっては、この問題は、react-scripts の古いバージョンの使用によって発生する可能性もあります。バージョンを最新リリースに更新すると、問題が解決される可能性があります。

以上がReact コンポーネントで「無効なフック呼び出し」エラーが発生するのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート