Meteor 方法调用进入无限循环
Meteor method call runs into infinite loop
我是 Meteor 的新手,我试图通过从数组传递不同的参数来从 API 中获取数据,但它 运行 进入了无限循环。我可以看到对象一次又一次地呈现,并且值不断变化,而不是在调用响应后将正确的值附加到对象中。
let [projectvalue, setProjectvalue] = useState({});
let projectList = ['abc','def','bbb','sss'];
projectList.map(projectName => {
useEffect(
(project = projectName) =>
Meteor.call(
'method.getValue',
{ project },
(error, resp) => {
if (error) throw new Error(error);
resp.status.map(val => {
if(val.key == "data"){
setProjectvalue({...projectvalue, [projectName] : val.actualValue })
}
})
}
),
);
});
console.log(projectvalue);
我需要从不同项目名称的响应中获取实际值。
已编辑:
useEffect(() => {
projectList.map(project => {
Meteor.call(
'method.getValue',
{ project },
(error, resp) => {
if (error) throw new Error(error);
resp.status.map(val => {
if(val.key == "data"){
setProjectvalue({...projectvalue, [projectName] : val.actualValue })
}
})
}
)
})
}
,[projectList]);
您缺少 useEffect
挂钩的依赖项数组。钩子应该放在功能范围的顶层。不在 map
方法内:
useEffect(
projectList.map(projectName => {
Meteor.call(
'method.getValue',
{ projectName },
(error, resp) => {
if (error) throw new Error(error);
resp.status.map(val => {
if(val.key == "data"){
setProjectvalue({...projectvalue, [projectName] : val.actualValue })
}
})
}
)
});
, []);
查看官方 React 文档 https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level
我是 Meteor 的新手,我试图通过从数组传递不同的参数来从 API 中获取数据,但它 运行 进入了无限循环。我可以看到对象一次又一次地呈现,并且值不断变化,而不是在调用响应后将正确的值附加到对象中。
let [projectvalue, setProjectvalue] = useState({});
let projectList = ['abc','def','bbb','sss'];
projectList.map(projectName => {
useEffect(
(project = projectName) =>
Meteor.call(
'method.getValue',
{ project },
(error, resp) => {
if (error) throw new Error(error);
resp.status.map(val => {
if(val.key == "data"){
setProjectvalue({...projectvalue, [projectName] : val.actualValue })
}
})
}
),
);
});
console.log(projectvalue);
我需要从不同项目名称的响应中获取实际值。
已编辑:
useEffect(() => {
projectList.map(project => {
Meteor.call(
'method.getValue',
{ project },
(error, resp) => {
if (error) throw new Error(error);
resp.status.map(val => {
if(val.key == "data"){
setProjectvalue({...projectvalue, [projectName] : val.actualValue })
}
})
}
)
})
}
,[projectList]);
您缺少 useEffect
挂钩的依赖项数组。钩子应该放在功能范围的顶层。不在 map
方法内:
useEffect(
projectList.map(projectName => {
Meteor.call(
'method.getValue',
{ projectName },
(error, resp) => {
if (error) throw new Error(error);
resp.status.map(val => {
if(val.key == "data"){
setProjectvalue({...projectvalue, [projectName] : val.actualValue })
}
})
}
)
});
, []);
查看官方 React 文档 https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level