useEffect内でsetStateを使用するときにReactコードで無限ループを防ぐ方法

アダム

codesandboxを確認してください:https://codesandbox.io/s/bold-hamilton-k1nzs

コードを実行すると、無限ループが発生します。コンソールをチェックして、エントリが指数関数的にどのように増加するかを確認できます。そして最終的にウェブサイトがクラッシュします。

私はこのような状態変数を持っています:

const [checkbox, setCheckBox] = useState({});

次に、useEffect内の関数を呼び出しています。

useEffect(() => {
    createCheckbox();
  });

これはcreateCheckbox関数です。

const createCheckbox = () => {
    let checkboxObj = {};
    rows.forEach((e) => {
      checkboxObj[e.id] = false;
    });
    setCheckBox(checkboxObj);
  };

問題を紹介するために、76行目にconsole.logがあります。console.log(チェックボックス)です

何が起こっているのか考えていますか?

ドリューリース

問題

useEffect(() => {
  createCheckbox();
});

useEffectそれはコンポーネントをレンダリングするたびに実行されますので、フックには依存していない、とフックのコールバックが、最終的に状態を更新するので、それは別のレンダリングサイクルをトリガします。すすぎ、繰り返し、吐き気を催します(つまり、レンダリングのループ)。

解決

基本的に、最初のロード時にチェックボックスを空/ falseとして初期化します。

useEffect空の依存関係配列を使用して、コンポーネントのマウント時にエフェクトを1回実行できます

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

または、useStateフックで遅延状態初期化関数を使用します

const [checkbox, setCheckBox] = useState(() => {
  let checkboxObj = {};
  rows.forEach((e) => {
    checkboxObj[e.id] = false;
  });
  return checkboxObj;
});

デモ

how-to-prevent-infinite-loop-in-my-react-code-when-using-setstate-inside-useeffeを編集します

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

reactとsocket.ioで無限ループを防ぐ方法

react-nativeでuseEffect()を使用すると、無限ループに陥ります

ReactのonErrorを介して画像ソースを設定するときに無限ループを防ぐ方法は?

RAMを使用せずにpynputのコードでループを作成する方法とそれは無限です

互いに更新する2つのウィジェットで無限ループを防ぐ方法は?

Python3で無限のwhileループを防ぐ方法

欠落している依存関係をuseEffectに含め、関数の無限ループ実行を防ぐにはどうすればよいですか?

forループが無限にループするのを防ぐにはどうすればよいですか?

フックでReactを使用すると、useEffectが無限ループに入ります

基本的に同じコードですが、1つはuseeffectで無限ループを引き起こします

ReactでuseEffectを使用してuseStateを使用する無限ループ

Javascript:promiseを使用するときにコードの重複を防ぐために必要なヘルプ

Expressでエラーを送信するときにコードの重複を防ぐ最も効率的な方法

パラメータを使用するときにラムダ関数でコードの複製を防ぐ

JettyでSSLv3プロトコルを無効にしてプードル攻撃を防ぐ方法

Firebaseを使用してuseEffectで無限ループを停止する

状態がreactで無限ループを更新するのを防ぐにはどうすればよいですか?

in doコマンドのWindowsバッチファイルで無限ループを防ぐにはどうすればよいですか?

DOMTimerCoordinator :: NextIDが無限ループに入るのを防ぐのは何ですか?

エラー:再レンダリングが多すぎます。Reactは、useState()を使用するときに無限ループを防ぐために、レンダリングの数を制限します

テキスト補間で改行を使用するときにエスケープを防ぐ方法 (Ruby)

componentDidUpdateで無限ループを防ぐためにルーティングロジックを処理する方法は?

JqueryUiオートコンプリートを使用するときにブートストラップトークンフィールドで重複を防ぐ方法

useEffect依存関係配列でRedux状態を使用するときに無限ループを回避するにはどうすればよいですか?

オブザーバブルを使用するときにAngular2でhttp呼び出しを防ぐ方法は?

React:useEffectでコンテキスト関数を呼び出すときに無限ループを防止します

useEffectとsetStateでループする方法

PHPでの無限ループの問題を防ぐ

Postgresqlの再帰クエリで無限ループを防ぐ

TOP 一覧

  1. 1

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  2. 2

    ソートされた検索、ターゲット値未満の数をカウント

  3. 3

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    Ansibleで複数行のシェルスクリプトを実行する方法

  6. 6

    Reactでclsxを使用する方法

  7. 7

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  8. 8

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  9. 9

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  10. 10

    PowerShellの分割ファイルへのヘッダーの追加

  11. 11

    Chromeウェブアプリのウェブビューの高さの問題

  12. 12

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  13. 13

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  14. 14

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  15. 15

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  16. 16

    MLでのデータ前処理の背後にある直感

  17. 17

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  20. 20

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  21. 21

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

ホットタグ

アーカイブ