axios呼び出しの無限ループ、React

アンドレFアリザカルデロン

最近、私は個人的なプロジェクトに取り組んでいますが、何かが起こっているのですが、その理由はわかりません。関数を呼び出して値を取得しようとすると、配列に無限のオブジェクトがあるかのようにループし続けます。私はこのプロセスをtucutしようとしていますが、現時点ではできませんでした。

私が間違っていることを教えていただけますか?前もって感謝します

これが私のコードです

const ModalBodyUpdatePreparacion: React.FC<modalBodyFormProps> = (props: modalBodyFormProps) => {

const[stockPreparaciones, setStockPreparaciones] = useState<any[]>([]);
const[nombreIng, setNombreIng] = useState('');

useEffect(() => { //I'm using this useEffect hook to obtain the values of my array, which has just two objects at the moment
    getPreparaciones();
},[stockPreparaciones.length]);

const getPreparaciones = () => {
    console.log(props.objectS);
    axios.get('https://inventario-services.herokuapp.com/invservice/stock/getone/?codigo=' + props.objectS)
    .then(result => {
        console.log(result);
        setStockPreparaciones(result.data.preparaciones);
        console.log(stockPreparaciones);
    }).catch(console.log); 
}

function getNombre(e:any){ //This is the function that I'm calling
    axios.get('https://inventario-services.herokuapp.com/invservice/stock/getone/?codigo=' + e)
    .then(result => {
        console.log('busqueda del nombre');
        console.log(result);
        setNombreIng(result.data.nombre);
        console.log(nombreIng);
    });
    console.log(nombreIng);
    return nombreIng;
}

return(
    <div>
        <Container>
            <br></br>
            <Grid columns={3} divided>
                <Grid.Row>
                    <Grid.Column>
                        <label>Nombre del ingrediente:</label>
                    </Grid.Column>
                    <Grid.Column>
                        <label>Cantidad:</label>
                    </Grid.Column>
                    <Grid.Column>
                        <label>Acciones:</label>
                    </Grid.Column>
                </Grid.Row>
                {
                    stockPreparaciones.map(st => ( //Here is where I'm going through my array, it's just about two objects
                        <Grid.Row key={st.id}>
                            <Grid.Column>
                                <Input size='small' placeholder='Nombre ingrediente' value={getNombre(st.codigo_ingrediente)} disabled  /> //Here is were I'm calling the function to get a value
                            </Grid.Column>
                            <Grid.Column>
                                <Input size='small' placeholder='Cantidad*'  value={st.cantidadxpreparacion} disabled/>
                            </Grid.Column>
                            <Grid.Column>
                            <Button variant="secondary" onClick={props.handleSubmit}>
                                Eliminar
                            </Button>
                            </Grid.Column>
                        </Grid.Row>
                    ))
                }
            </Grid>
        </Container>
        <br></br>
        <Button variant="secondary" onClick={props.handleSubmit}>
            Cancelar
        </Button>
        <Button variant="secondary" >
            Agregar preparacion
        </Button>
    </div>
);}

問題は、私が一意の値を取得しようとしても、データをレンダリングし続けるということです...だからそれはちょっとクレイジーです。

これは私のコンソールの例です:

関数「getNombre」を実行しているコンソールの例

ありがとうございました

Vivek doshi

問題は:

1.レンダリング時に関数を呼び出す:

// this will call the function on each render 
value={getNombre(st.codigo_ingrediente)}

2.getNombre機能は以下を介して再レンダリングを引き起こしますsetNombreIng

function getNombre(e:any){ //This is the function that I'm calling
    axios.get('https://inventario-services.herokuapp.com/invservice/stock/getone/?codigo=' + e)
    .then(result => {
        console.log('busqueda del nombre');
        console.log(result);
        setNombreIng(result.data.nombre); // <--- Setting state will make re- render
        console.log(nombreIng);
    });
    console.log(nombreIng);
    return nombreIng;
}

結果:無限ループ


解決 :

私はいくつかの変更を加えました:

それに依存しているのでgetNombreから呼び出すことができgetPreparaciones、次に値を直接使用して最初のapiのデータを保存できます

したがって、2番目の状態は必要ありません nombreIng

const[stockPreparaciones, setStockPreparaciones] = useState<any[]>([]);
// const[nombreIng, setNombreIng] = useState(''); // <--- NO NEED OF THIS NOW

const getPreparaciones = async () => {
    try {
        const result = await axios.get('https://inventario-services.herokuapp.com/invservice/stock/getone/?codigo=' + props.objectS);
        let data = result.data.preparaciones
        for(let i = 0 ; i< data.length ; i++ ) {
            data[i].nombreIng = await getNombre(data[i].codigo_ingrediente); // <--- WE'LL STORE IT INSIDE MAIN DATA
        }
        setStockPreparaciones(data);
    } catch(err) {
        catch(console.log); 
    }
}

const getNombre = async (e:any) => {
    const result= await axios.get('https://inventario-services.herokuapp.com/invservice/stock/getone/?codigo=' + e)
    return result.data.nombre;
}
// now you can directly access this with `st.nombreIng`
<Input size='small' placeholder='Nombre ingrediente' value={st.nombreIng} disabled  /> 

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

React.JS-ComponentDidUpdateメソッドはAxios呼び出しに無限ループを提供します

分類Dev

Angular.js呼び出し関数の無限ループ

分類Dev

関数を呼び出すときのAngularJSの無限ループの呼び出し?

分類Dev

ポストでの関数呼び出しを伴う無限ループ

分類Dev

API呼び出しでFutureBuilderを使用する際の無限ループ

分類Dev

heightForRowAtIndexPathで関数を呼び出している間の無限ループ

分類Dev

無限ループと無限再帰呼び出しの違いは何ですか?

分類Dev

関数を呼び出す角度の無限ループ

分類Dev

AxiosとPromisesを使用したAPI呼び出しのループ

分類Dev

reactおよびreduxのcomponentDidUpdate()でアクションを呼び出して状態を設定する方法(無限ループを防ぐ)

分類Dev

reactおよびreduxのcomponentDidUpdate()でアクションを呼び出して状態を設定する方法(無限ループを防ぐ)

分類Dev

React: componentDidUpdate またはレンダリングでのイベント トリガーの Ajax 呼び出しは、無限ループを作成します。

分類Dev

REST呼び出しを伴うFlutteronTapは無限ループで終了します

分類Dev

ReactRedux-アクションプロップで未定義の無限スクロール呼び出し

分類Dev

os.systemを繰り返し呼び出す無限のwhileループを停止します

分類Dev

startappメソッドの呼び出し後、Djangoは無限にループします

分類Dev

マイクロサービスは呼び出しの無限ループを装いますか?

分類Dev

ng-repeat / ng-classが$ httpを呼び出す関数を呼び出すときの無限ループ

分類Dev

db.Ping()が呼び出されたときの無限ループ

分類Dev

自分自身を呼び出すことによるSubMain()の無限ループ?

分類Dev

関数を呼び出した後、なぜ無限ループに陥るのですか?

分類Dev

無限ループで呼び出されるFirebaseCloud関数

分類Dev

whileループから関数を呼び出すと、無限ループが発生します

分類Dev

AJAX呼び出し後の無限スクロールのリセット/無効化

分類Dev

React:パラメータを使用して関数を呼び出すと無限ループが発生します

分類Dev

配列をループしてaxios呼び出しを行う

分類Dev

ServiceNow:コールバック関数でonSubmitを呼び出すと、無限ループが発生します

分類Dev

Ajax呼び出しを使用したAngular式バインディングを使用した無限ループ

分類Dev

useEffectを使用してHTTP呼び出しを行うときに無限ループに反応する

Related 関連記事

  1. 1

    React.JS-ComponentDidUpdateメソッドはAxios呼び出しに無限ループを提供します

  2. 2

    Angular.js呼び出し関数の無限ループ

  3. 3

    関数を呼び出すときのAngularJSの無限ループの呼び出し?

  4. 4

    ポストでの関数呼び出しを伴う無限ループ

  5. 5

    API呼び出しでFutureBuilderを使用する際の無限ループ

  6. 6

    heightForRowAtIndexPathで関数を呼び出している間の無限ループ

  7. 7

    無限ループと無限再帰呼び出しの違いは何ですか?

  8. 8

    関数を呼び出す角度の無限ループ

  9. 9

    AxiosとPromisesを使用したAPI呼び出しのループ

  10. 10

    reactおよびreduxのcomponentDidUpdate()でアクションを呼び出して状態を設定する方法(無限ループを防ぐ)

  11. 11

    reactおよびreduxのcomponentDidUpdate()でアクションを呼び出して状態を設定する方法(無限ループを防ぐ)

  12. 12

    React: componentDidUpdate またはレンダリングでのイベント トリガーの Ajax 呼び出しは、無限ループを作成します。

  13. 13

    REST呼び出しを伴うFlutteronTapは無限ループで終了します

  14. 14

    ReactRedux-アクションプロップで未定義の無限スクロール呼び出し

  15. 15

    os.systemを繰り返し呼び出す無限のwhileループを停止します

  16. 16

    startappメソッドの呼び出し後、Djangoは無限にループします

  17. 17

    マイクロサービスは呼び出しの無限ループを装いますか?

  18. 18

    ng-repeat / ng-classが$ httpを呼び出す関数を呼び出すときの無限ループ

  19. 19

    db.Ping()が呼び出されたときの無限ループ

  20. 20

    自分自身を呼び出すことによるSubMain()の無限ループ?

  21. 21

    関数を呼び出した後、なぜ無限ループに陥るのですか?

  22. 22

    無限ループで呼び出されるFirebaseCloud関数

  23. 23

    whileループから関数を呼び出すと、無限ループが発生します

  24. 24

    AJAX呼び出し後の無限スクロールのリセット/無効化

  25. 25

    React:パラメータを使用して関数を呼び出すと無限ループが発生します

  26. 26

    配列をループしてaxios呼び出しを行う

  27. 27

    ServiceNow:コールバック関数でonSubmitを呼び出すと、無限ループが発生します

  28. 28

    Ajax呼び出しを使用したAngular式バインディングを使用した無限ループ

  29. 29

    useEffectを使用してHTTP呼び出しを行うときに無限ループに反応する

ホットタグ

アーカイブ