Mongodb 资源数据赢得';无法正确保存到状态
我有一个MERN应用程序,它从MongoDB中的集合中提取数据,在DOM中呈现计时器组件。目前在我的收藏中,我有三个计时器,分别是Mongodb 资源数据赢得';无法正确保存到状态,mongodb,axios,Mongodb,Axios,我有一个MERN应用程序,它从MongoDB中的集合中提取数据,在DOM中呈现计时器组件。目前在我的收藏中,我有三个计时器,分别是第一个计时器,另一个计时器,甚至还有另一个计时器。当我发出get请求并运行console.log(res.data)时,我会看到所有计时器及其相关数据都记录到控制台中。但是,当我尝试使用useState钩子设置计时器的状态时,只有最后一个计时器保存为state。以下是我的组件的代码: 函数包装器(){ const[timers,setTimers]=useState
第一个计时器
,另一个计时器
,甚至还有另一个计时器
。当我发出get请求并运行console.log(res.data)
时,我会看到所有计时器及其相关数据都记录到控制台中。但是,当我尝试使用useState钩子设置计时器的状态时,只有最后一个计时器保存为state。以下是我的组件的代码:
函数包装器(){
const[timers,setTimers]=useState([]);
const[title,setTitle]=useState(“”);
useffect(()=>{
axios
.get('http://localhost:3001/')
。然后((res)=>{
console.log(res.data);
res.data.map((计时器)=>{
设newTimer=(
);
设allTimers=timers.slice();
所有定时器推送(新定时器);
设置定时器(所有定时器);
控制台日志(所有计时器);
});
})
.catch((错误)=>{
控制台日志(err);
});
}, [])由于您将useffect
设置为仅在初始渲染时运行,因此它始终引用计时器的初始状态,这是一个空数组,即使您尝试使用useffect
更新它,但在下一个循环中,它仍然引用空数组。唯一具有实际效果的更新是最后一个,即将第三个计时器插入空数组。
您可以将整个map
循环移动到函数组件的return语句,以便为每个计时器呈现一个元素。非常感谢!我以为我在做一些愚蠢的事情。您认为最好的做法是创建一个获取所有计时器的函数,然后在useffect
中调用它,还是只编写getuseffect
中的请求?从技术上讲,它是相同的,使用单独的函数更易于阅读和维护。