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