javascript - 在 useEffect() 中对更改状态做出无限循环反应
问题描述
我正在尝试更新 a 中的状态useEffect
,我得到:
React Hook
useEffect
缺少一个依赖项:'user'。包括它或删除依赖数组。如果您在“setUser”调用中只需要“用户”,您也可以进行功能更新“setUser(u => ...)” react-hooks/exhaustive-deps
如果我将用户状态作为依赖项,那么我会得到一个无限循环。
const [user, setUser] = useState({
displayName: '',
hasPassword: false,
...
});
let { userId } = useParams();
useEffect(() => {
const checkPassword = async (userId) => {
try {
const res = await UserService.checkPassword(userId);
if (res.status === 200) {
setUser({...user, hasPassword: res.data.hasPassword });
}
} catch (err) {
setUser({...user, hasPassword: false });
}
};
checkPassword(userId);
}, [userId, user]);
如果我从依赖数组中删除用户,则一切正常,但我正在尝试摆脱该警告。我只需要执行一次这个函数。
解决方案
我猜你可以使用之前的状态user
而不是状态user
:
setUser(prevState => ({
...prevState,
hasPassword: res.data.hasPassword
}));
因此,您不需要user
依赖数组。
最终代码将与建议:
useEffect(() => {
const checkPassword = async (userId) => {
try {
const res = await UserService.checkPassword(userId);
if (res.status === 200) {
setUser(prevState => ({
...prevState,
hasPassword: res.data.hasPassword
}));
}
} catch (err) {
setUser(prevState => ({
...prevState,
hasPassword: false
}));
}
};
checkPassword(userId);
}, [userId]);
推荐阅读
- asp.net - ASP.NET 基于角色的授权无法找到服务器/数据库
- python - 在 while 循环中保存 txt 文件会在每个步骤中保存当前和上一个迭代
- c# - 如何将文本框中的字符串添加到另一个窗口中的列表视图
- gnuplot - 强制gnuplot显示零轴,同时让它自动缩放
- python - 如何使用 Element.findall() 搜索标签并打印其值
- windows - 如何修复批处理脚本中的“缺少操作数”
- css - 如何获得仅适用于盒子的模糊效果
- java - 如何从 DialogFragment 获取值?
- xaml - XAML 网格未按预期工作 列表视图不显示
- swiftui - 如何将 RandomAccessCollection 与 ForEach 列表一起使用?