首页 > 解决方案 > 即使获取数据没有改变,UseEffect 仍然运行

问题描述

我有这个 UseEffect() 代码,即使我通过了第二个参数,即使数据没有改变,它也会继续重新渲染,知道吗?希望尽快得到解决方案(MERN)

前端

const [qty, setQty] = useState([])
useEffect(() => {
    fetch('/QtyCheck',{
        headers:{
            "Content-Type":"application/json"
        }
    })
    .then(res=>res.json())
    .then(qtyValue=>{
        setQty(qtyValue)
    })
},[qty])enter code here

后端

    router.get('/QtyCheck',(req,res)=>{
    Post.find({},{qty:1,minT:1,criT:1, code:1,name:1,isDisable:1})
    .then(postFind=>{
        if(postFind.length===0){
            res.json("nil")
        }else{
           res.json(postFind)
        }
    }).catch(noPost=>{
        res.json("Error",noPost)
    })
})

标签: reactjsreact-hooksmern

解决方案


我认为您在这里进行了无限循环,因为您如何设置括号的结尾[qty]

render > useEffect > fetchData > [Qty](表示数据变化)>re-render >useEfect > 依此类推

这里最重要的部分是空括号 []

相反,您可以创建一个单独的函数,例如:


const fetchdata = () =>
{
fetch('/QtyCheck',{
        headers:{
            "Content-Type":"application/json"
        }
    })
    .then(res=>res.json())
    .then(qtyValue=>{
        setQty(qtyValue)
    })
}
useEffect(()=>{
fetchdata()
},[])` 

推荐阅读