Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React hook setState导致无限渲染_Javascript_Reactjs_React Native_React Redux - Fatal编程技术网

Javascript React hook setState导致无限渲染

Javascript React hook setState导致无限渲染,javascript,reactjs,react-native,react-redux,Javascript,Reactjs,React Native,React Redux,我想知道为什么当我从后端API设置它的值时,它会被无限渲染卡住。 我不想使用useffect()停止它,因为我需要在赋值后使用它重新渲染 代码: import React, { useState, useEffect } from 'react'; // import FormCheckLabel from 'react-bootstrap/FormCheckLabel'; import './CheckForms.css'; // import Scrollspy from '../Scrol

我想知道为什么当我从后端API设置它的值时,它会被无限渲染卡住。 我不想使用useffect()停止它,因为我需要在赋值后使用它重新渲染

代码:

import React, { useState, useEffect } from 'react';
// import FormCheckLabel from 'react-bootstrap/FormCheckLabel';
import './CheckForms.css';
// import Scrollspy from '../Scrollspy/Scrollspy';
import axios from 'axios';

const CheckForms = () => {
    const [menu, setMenu] = useState([]);
    const fetchList = async () => {
        try {
            const res =  await axios.get(`http://localhost:5000/api/items`);
            const list =  res.data.response;    
            // setMenu(list); // <-- This is causing ulimited renders ! //
        } catch (err) {
            console.log(err.response);
        };
    };
    fetchList();
    console.log("something"); 
    return (
        <div>    
        </div>
    )
}

export default CheckForms;
import React,{useState,useffect}来自“React”;
//从“react引导/FormCheckLabel”导入FormCheckLabel;
导入“./CheckForms.css”;
//从“../Scrollspy/Scrollspy”导入Scrollspy;
从“axios”导入axios;
常量CheckForms=()=>{
const[menu,setMenu]=useState([]);
常量fetchList=async()=>{
试一试{
const res=等待axios.get(`http://localhost:5000/api/items`);
常量列表=res.data.response;

//setMenu(list);//您不能将
fetchList();
放在
useffect()之外,因为

当安装组件时,调用
fetchList()
,它设置状态和组件重新加载

再次执行
fetchList()
,并再次设置状态和重新排序。它形成一个无限循环

你必须这样做
useffect(()=>fetchList(),[])

或者在事件上执行它

您不能将
fetchList();
放在
useffect()
之外,因为

当安装组件时,调用
fetchList()
,它设置状态和组件重新加载

再次执行
fetchList()
,并再次设置状态和重新排序。它形成一个无限循环

你必须这样做
useffect(()=>fetchList(),[])

或者在事件上执行它

您需要
useffect
,否则每次重新渲染时都会调用
fetchList

因此,您的无限循环来自:

fetchList()
=>
setMenu()
=>
render()
=>
fetchList()
=>
setMenu()
等等

我不想用useffect()来阻止它,因为我需要用它来重新 指定值后渲染


useffect(callback,[triggers])
第二个参数正是为了实现这一点,根据道具/状态更改来控制重新渲染的时间。为此,您需要
useffect
。否则每次重新渲染时都会调用
fetchList

因此,您的无限循环来自:

fetchList()
=>
setMenu()
=>
render()
=>
fetchList()
=>
setMenu()
等等

我不想用useffect()来阻止它,因为我需要用它来重新 指定值后渲染

useffect(callback,[triggers])
第二个参数正好用于此,根据道具/状态更改控制重新渲染的时间