Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
Mongodb 资源数据赢得';无法正确保存到状态_Mongodb_Axios - Fatal编程技术网

Mongodb 资源数据赢得';无法正确保存到状态

Mongodb 资源数据赢得';无法正确保存到状态,mongodb,axios,Mongodb,Axios,我有一个MERN应用程序,它从MongoDB中的集合中提取数据,在DOM中呈现计时器组件。目前在我的收藏中,我有三个计时器,分别是第一个计时器,另一个计时器,甚至还有另一个计时器。当我发出get请求并运行console.log(res.data)时,我会看到所有计时器及其相关数据都记录到控制台中。但是,当我尝试使用useState钩子设置计时器的状态时,只有最后一个计时器保存为state。以下是我的组件的代码: 函数包装器(){ const[timers,setTimers]=useState

我有一个MERN应用程序,它从MongoDB中的集合中提取数据,在DOM中呈现计时器组件。目前在我的收藏中,我有三个计时器,分别是
第一个计时器
另一个计时器
甚至还有另一个计时器
。当我发出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
中调用它,还是只编写get
useffect
中的请求?从技术上讲,它是相同的,使用单独的函数更易于阅读和维护。