为了账号安全,请及时绑定邮箱和手机立即绑定

React Hook useEffect 缺少依赖项:“formData”。包括它或删除依赖项数组。

React Hook useEffect 缺少依赖项:“formData”。包括它或删除依赖项数组。

烙印99 2023-05-19 14:46:05
当设置值但缺少依赖项时,将 formData 添加到依赖项中,然后将进入无限循环  useEffect(() => {    if (id !== 0) {        profileByID(id).then((res) => {            const data = res.data.result;            setTimeout(() => {                setFormData({                    ...formData,                    firstName: data.firstName,                    lastName: data.lastName,                    email: data.email,                });                setbirthDate(new Date(data.birthDate));            }, 1000);        });    }    console.log(true);  }, [id, profileByID]);
查看完整描述

2 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

解决方法是将其转换为功能更新:


setFormData(formData => ({

  ...formData,

  firstName: data.firstName,

  lastName: data.lastName,

  email: data.email,

}));

那么你不需要放入formData依赖数组。


查看完整回答
反对 回复 2023-05-19
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

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

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

obj==={...,a:1} //假

即它们不相同,因此像这样设置 setFormData 将始终导致重新渲染并导致无限循环。这只是 useFormData 如何在幕后比较数据的基本说明。所以要解决这个问题,请对所有不同的事物使用不同的 useState 示例

const[firstName, setFirstName]= useState('')

常量[lastName, setLastName]= useState('')

const[email, setEmail]= useState('')

等等..

或者如果有大量数据,则使用 useReducer 方法,有很多博客,您可以从中浏览 useReducer 方法


查看完整回答
反对 回复 2023-05-19
  • 2 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号