javascript - React Hook useEffect 缺少依赖项:'formData'。包括它或删除依赖数组。什么是依赖是使用
问题描述
何时设置值但缺少依赖项添加 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]);
解决方案
它会进入无限循环,因为每当您使用 setFormData 更新表单值时,它都会触发渲染,而渲染又会再次调用 useEffect 方法。发生这种情况是因为您每次使用 setFormData 都在设置一个新对象。
让 obj={a: 1,b:2}
obj==={...,a:1} //假
即它们不一样,所以像这样设置 setFormData 总是会导致重新渲染并导致无限循环。这只是 useFormData 如何在幕后比较数据的基本说明。因此,要解决此问题,请对所有不同的事物使用不同的 useState 示例
const[firstName, setFirstName]= useState('')
const[lastName, setLastName]= useState('')
const[email, setEmail]= useState('')
等等..
或者如果有大量数据,请使用 useReducer 方法,有很多博客可以从其中通过 useReducer 方法
推荐阅读
- android - Xamarin Android 状态栏字体颜色
- ios - 使用 Hyperloop 在 iOS Appcelerator 中播放 Youtube 视频
- c# - Telerik - 无法用数据填充网格
- android - 从 IntentService 调用时,React 本机事件无法发出
- asp.net - 自动版本增量
- regex - 在使用正则表达式 Python 替换字符串列表中的数值时需要帮助
- java - 如何使用 Gradle 运行 Jetty
- haskell - 如何解析此 GHC 类型检查错误消息?
- kotlin - 返回匹配条件的迭代器项值
- php - PHP循环数组直到索引改变