mongodb useEffect导致数据库中的数据填充出现无限循环

chhqkbe1  于 2023-05-17  发布在  Go
关注(0)|答案(2)|浏览(150)

我正在将数据从数据库加载查询传递到我的脚本中,并使用useEffect来更新现有数据。这出于某种原因导致UE无限地运行。useEffect如下所示,它由来自DB的数据数组调用。

useEffect(()=>{
    console.log("UE1"); // running on infinite loop. TODO: DEBUG. 
    setCircles(paramsObject?.circles)
}, [paramsObject])

使用circle元素更新此useState(svg):

//ocircles created/creating
const [circles, setCircles] = useState([]);

我不确定该尝试什么,因为这个useEffect对于加载数据并将其用作页面的当前数据状态至关重要。
下面是更多的上下文代码:

//CIRCLES ARRAY const [circles, setCircles] = useState([]);  
const { id } = useParams(); 
const { data } = useQuery(LOAD_DATA);   
const loadedData = data?.params.find(element => id === element._id); const loadedID = loadedData?._id; 
const paramsObject = JSON.parse(loadedData?.params || '{}');

useEffect(()=>{         
setCircles(paramsObject?.circles) 
},[paramsObject]
6qfn3psc

6qfn3psc1#

const loadedData = data?.params.find(element => id === element._id);

每次重新呈现后都会重新计算搜索结果,因此每次获得对paramsObject的新引用时都会创建一个新的数组引用。
总的来说,您在useEffect中执行setState并启动重新呈现过程,对上述变量的引用发生变化,useEffect再次工作,如此循环
你可以在useMemo中 Package 所有内容,但这不是最好的解决方案。我看不到你所有的代码,所以我不能写一个现成的解决方案,但我可以建议你重写useEffect,这样它只在id改变时更新

rxztt3cl

rxztt3cl2#

我想出了一个简单的解决办法。它可能是一个创可贴。
但是,我只是将useEffect调用更改为:
[array.length]而不是[array]

相关问题