Javascript React Hook useEffect缺少依赖项:';formData';。包括它或删除依赖项数组。依赖性是什么

Javascript React Hook useEffect缺少依赖项:';formData';。包括它或删除依赖项数组。依赖性是什么,javascript,reactjs,Javascript,Reactjs,当设置为值但缺少依赖项时,在依赖项中添加formData,则is将进入无限循环 useffect(()=>{ 如果(id!==0){ profileByID(id)。然后((res)=>{ 常量数据=res.data.result; 设置超时(()=>{ setFormData({ …表格数据, firstName:data.firstName, lastName:data.lastName, 电子邮件:data.email, }); setbirthDate(新日期(data.birthDat

当设置为值但缺少依赖项时,在依赖项中添加formData,则is将进入无限循环

useffect(()=>{
如果(id!==0){
profileByID(id)。然后((res)=>{
常量数据=res.data.result;
设置超时(()=>{
setFormData({
…表格数据,
firstName:data.firstName,
lastName:data.lastName,
电子邮件:data.email,
});
setbirthDate(新日期(data.birthDate));
}, 1000);
});
}
console.log(true);
},[id,profileByID]);

一个解决方法是将此转换为功能更新:

setFormData(formData => ({
  ...formData,
  firstName: data.firstName,
  lastName: data.lastName,
  email: data.email,
}));

然后,您不需要将
formData
放入依赖项数组。

它将进入无限循环,因为每当您使用setFormData更新表单值时,它都会触发一个渲染,而该渲染又会调用useffect方法。之所以会发生这种情况,是因为每次使用setFormData时都会设置一个新对象

设obj={a:1,b:2}

obj=={…,a:1}//False

i、 e.它们不一样,所以这样设置setFormData总是会导致重新加载,并导致无限循环。这只是useFormData如何在幕后比较数据的基本说明。 因此,要解决这个问题,请对所有不同的事物使用不同的useState,例如

const[firstName,setFirstName]=useState(“”)

const[lastName,setLastName]=useState(“”)

const[email,setEmail]=useState(“”)

等等

或者使用useReducer方法如果有很多数据,有很多博客,你可以通过useReducer方法