亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號