Javascript 无限循环

Javascript 无限循环,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,所以我有一个项目组件,它从我的项目上下文中获取数据。我试图选择对象数组中的第一个对象,并将其传递到一个新状态 项目组成部分 所以我有点不知所措了 更新:我使用的答案 由于setSelected会导致重新渲染,并且在“重新渲染项目”上,“长度”再次大于0,这将导致另一次重新渲染,依此类推 避免这种情况的一种方法是仅在没有选择项目时调用selectProj: if (!selected && projects.length > 0) { selectProj(project

所以我有一个项目组件,它从我的项目上下文中获取数据。我试图选择对象数组中的第一个对象,并将其传递到一个新状态

项目组成部分

所以我有点不知所措了

更新:我使用的答案


由于setSelected会导致重新渲染,并且在“重新渲染项目”上,“长度”再次大于0,这将导致另一次重新渲染,依此类推

避免这种情况的一种方法是仅在没有选择项目时调用selectProj:

if (!selected && projects.length > 0) {
  selectProj(projects[0]);
}

不要在渲染时更改状态,您可以在useEffect中更改,也可以提供初始值

useEffect(()=> {
   setSelected(projects[0])
}, [])


谢谢,这个答案奏效了。还有另一个答案,我使用useEffect并将我的条件语句放在那里,它不再抛出错误。您的解决方案实际上不会工作,因为selected被初始化为{},所以它永远不会为false。也许以下方法可行:如果projects.length>0&&!projects.includesselected{此答案是正确的方法,但两个答案都会抛出错误,因为您没有检查projects是否为空
if (!selected && projects.length > 0) {
  selectProj(projects[0]);
}
useEffect(()=> {
   setSelected(projects[0])
}, [])
const [selected, setSelected] = useState(projects[0]);