【发布时间】:2021-03-04 16:19:29
【问题描述】:
我有这个 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)
})
})
【问题讨论】:
-
您在 useEffect 中设置了
qty,导致它再次调用它 -
@szczocik,是的,这就是意图,数量实时变化,我只想在提取数据从先前已经存在的数量数据发生变化时调用提取
-
是的,但是依赖数组指定只要更改
qty变量,然后在useEffect 中更改它,就会执行useEffect。这将导致不断更新 -
@szczocik,是的,但在我的情况下,数量有时会发生变化,并且我只想在数量通过 fetch 发生变化时重新渲染,是否有解决方案?通常我会刷新页面,但我认为这不是最佳选择
-
所以它在后端定期更改而无需用户交互?在这种情况下,您可以进行轮询 - 每隔 60 秒就定期获取数据。您还可以查看 websockets 或类似技术,以允许后端在发生更新时发送更新,在这种情况下您将更新前端。
标签: reactjs react-hooks mern