無限ループを引き起こすReactのuseEffectフック

スラジョベライ

React Hooksは初めてですが、なぜ無限ループが発生するのかわかりません。依存関係配列にcommentArrを指定しましたが、コンポーネントが初めてレンダリングされた後、1回だけ更新されます。依存関係配列を空のままにしておくことを読みました。 useEffectを1回だけ実行します。これで問題(無限ループ)は解決しましたが、Reactからこの警告が表示されました。

Line 31:7:  React Hook useEffect has a missing dependency: 'commentArr'. Either include it or remove the dependency array  react-hooks/exhaustive-deps

これがフックを使った私のコンポーネントです。警告なしに無限ループの問題を解決するにはどうすればよいですか?

import React, {useEffect, useState} from 'react'

import Footer from './Footer'
import Navigation from './Navigation'
import styles from "../assets/css/calc.module.css"
import Comment from './Comment'
import PostComment from './PostComment'
import assets from '../assets'
import axios from "../axiosConfig"
import AnsModal from './AnsModal'

function Calc(props) {

    const [commentArr, setCommentArr] = useState(null);

    useEffect(() => {
        axios.get('/comments.json')
            .then(res => {
                // for transforming object of objects into array of objects
                let allComments = []
                for (let key in res.data) {
                    allComments.push({
                        id: key,
                        ...res.data[key]
                    })
                }
                setCommentArr(allComments)
                console.log(commentArr);
            })
            .catch(err => console.log(err))
    },[commentArr])
    return (
    <>
        <div className="container bg-white shadow text-muted p-4">
            <Navigation />
            <div className="row d-flex justify-content-center m-2">
                <div className="col-md-8 col-12 text-justify">
                    Let this calculator do the heavy lifting.This formula helps you to calculate equivalent worth (Future Worth, F) given the values of Present Worth (P),
                    interest rate per year (effective interest rate) and time (investment duration).
                </div>
            </div>


            <div className="row">
                <div className="col-md-6 col-12">
                    <img src={assets[props.location.state.imagePath]} alt="image1" className={styles.image}/>
                </div>
                <div className="col-md-6 col-12">
                    <h4>Fill in the values.And get answers in seconds.</h4>
                    <hr style={{background: '#55b8cf', height: '6px'}}/>
                    <div className="form-group">
                        <label htmlFor="firstInput">{props.location.state.sum} value</label>
                        <input type="text"  id="firstInput" className="form-control" placeholder="e.g. 10000"/>
                    </div>
                    <div className="form-group">
                        <label htmlFor="secondInput">i value</label>
                        <input type="text" id="secondInput" className="form-control" placeholder="e.g. type 0.1 for 10%"/>
                    </div>
                    <div className="form-group">
                        <label htmlFor="thirdInput">n value</label>
                        <input type="text" id="thirdInput" className="form-control" placeholder="e.g. 5"/>
                    </div>
                    <div className="text-center">
                        <AnsModal />
                    </div>
                </div>
            </div>
            <h4>Comments</h4>
            <hr style={{background: '#55b8cf'}}/>

            <div className="row">
                <div className="col-md-6 col-12">
                    <Comment />
                    <Comment />
                    <Comment />
                    
                </div>
                <div className="col-md-6 col-12">
                    <PostComment />
                </div>
            </div>
            <hr style={{background: '#55b8cf'}}/>
            <Footer />
            
        </div>
        
    </>
    )
}
export default Calc;
Farhad Azarbarzinniaz

あなたが書いたこのコードでは:

  useEffect(() => {
    axios.get('/comments.json')
        .then(res => {
            // for transforming object of objects into array of objects
            let allComments = []
            for (let key in res.data) {
                allComments.push({
                    id: key,
                    ...res.data[key]
                })
            }
            setCommentArr(allComments)
            console.log(commentArr);
        })
        .catch(err => console.log(err))
},[commentArr])

これconsole.log(commentArr);は、依存関係として反応することを示唆しています。代わりにこれを使用してください:

   useEffect(() => {
    axios.get('/comments.json')
        .then(res => {
            // for transforming object of objects into array of objects
            let allComments = []
            for (let key in res.data) {
                allComments.push({
                    id: key,
                    ...res.data[key]
                })
            }
            setCommentArr(allComments)
  
        })
        .catch(err => console.log(err))
},[]);
 console.log(commentArr);

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Reactフォーム検証フックは無限の再レンダリングループを引き起こします

分類Dev

inputStream をモックする Spock が無限ループを引き起こす

分類Dev

ReactjsルーターonEnterフック認証は無限ループを引き起こします

分類Dev

ReactJSフェッチは無限ループを引き起こします

分類Dev

UseStateフックを反応させて無限ループを引き起こします

分類Dev

useEffectは、一定の依存関係で無限ループを引き起こします

分類Dev

<Link to = "/">がReactアプリで無限ループ/クラッシュを引き起こすのはなぜですか?

分類Dev

Reactフック引数は無限の再レンダリングを引き起こします

分類Dev

React : componentDidMount の setState が無限ループを引き起こさない

分類Dev

heroku reactappcacheファイルが無限ループを引き起こす

分類Dev

useEffectが無限ループを引き起こしたり、エラーが発生したりする

分類Dev

useEffectpropsコールバック関数が無限ループを引き起こします

分類Dev

sscanf()は、forループのインデックス値を変更することで無限ループを引き起こします

分類Dev

無限ループを引き起こすPythonスクリプトのエラーは何ですか

分類Dev

無限ループを引き起こすメニュー駆動型ロジックエラー

分類Dev

gulpwatchは無限ループを引き起こします

分類Dev

componentDidUpdateが無限ループを引き起こします

分類Dev

.hasNext()と.next()は無限のwhileループを引き起こします

分類Dev

なぜ無限ループを引き起こしているのですか?

分類Dev

無限ループを引き起こす変数の再識別

分類Dev

私のスクリプトは無限ループを引き起こしています

分類Dev

無限ループを引き起こすC ++リンクリストノードの作成

分類Dev

無限ループのあるスレッドが過剰なCPUを引き起こすか

分類Dev

setStateメソッドは、Reactjs関数で結果の無限ループを引き起こします

分類Dev

`data`が無限ループを引き起こすのに` newtype`は起こらない理由

分類Dev

Whileループ内のループが無限ループを引き起こす場合

分類Dev

奇妙なwhileループは無限ループを引き起こします

分類Dev

axiosキャンセルトークンによって引き起こされるreactuseEffectフック無限ループ[react-hooks / exhaustive-deps]

分類Dev

このコードが無限ループを引き起こすのはなぜですか?

Related 関連記事

  1. 1

    Reactフォーム検証フックは無限の再レンダリングループを引き起こします

  2. 2

    inputStream をモックする Spock が無限ループを引き起こす

  3. 3

    ReactjsルーターonEnterフック認証は無限ループを引き起こします

  4. 4

    ReactJSフェッチは無限ループを引き起こします

  5. 5

    UseStateフックを反応させて無限ループを引き起こします

  6. 6

    useEffectは、一定の依存関係で無限ループを引き起こします

  7. 7

    <Link to = "/">がReactアプリで無限ループ/クラッシュを引き起こすのはなぜですか?

  8. 8

    Reactフック引数は無限の再レンダリングを引き起こします

  9. 9

    React : componentDidMount の setState が無限ループを引き起こさない

  10. 10

    heroku reactappcacheファイルが無限ループを引き起こす

  11. 11

    useEffectが無限ループを引き起こしたり、エラーが発生したりする

  12. 12

    useEffectpropsコールバック関数が無限ループを引き起こします

  13. 13

    sscanf()は、forループのインデックス値を変更することで無限ループを引き起こします

  14. 14

    無限ループを引き起こすPythonスクリプトのエラーは何ですか

  15. 15

    無限ループを引き起こすメニュー駆動型ロジックエラー

  16. 16

    gulpwatchは無限ループを引き起こします

  17. 17

    componentDidUpdateが無限ループを引き起こします

  18. 18

    .hasNext()と.next()は無限のwhileループを引き起こします

  19. 19

    なぜ無限ループを引き起こしているのですか?

  20. 20

    無限ループを引き起こす変数の再識別

  21. 21

    私のスクリプトは無限ループを引き起こしています

  22. 22

    無限ループを引き起こすC ++リンクリストノードの作成

  23. 23

    無限ループのあるスレッドが過剰なCPUを引き起こすか

  24. 24

    setStateメソッドは、Reactjs関数で結果の無限ループを引き起こします

  25. 25

    `data`が無限ループを引き起こすのに` newtype`は起こらない理由

  26. 26

    Whileループ内のループが無限ループを引き起こす場合

  27. 27

    奇妙なwhileループは無限ループを引き起こします

  28. 28

    axiosキャンセルトークンによって引き起こされるreactuseEffectフック無限ループ[react-hooks / exhaustive-deps]

  29. 29

    このコードが無限ループを引き起こすのはなぜですか?

ホットタグ

アーカイブ