我的反应状态有问题。我正在创建具有基本空值的状态。然后我使用设置状态值的函数,然后将新的状态值(正如我所想的)带入下一个函数。但我的状态有旧的价值。当我在函数内部调用 console.log 时,我有新的值。
我知道 useState 是异步函数,但它不能帮助我)。对于创建状态,我使用钩子。
const { formData, setFormData } = useSetFormData({
userSearchRequest: "",
checkedUsers: [],
});
const handlUpdateCheckedUser = (userData, isChecked) => {
if (formData.checkedUsers && formData.checkedUsers.length > 0) {
if (!isChecked) {
setFormData((prevFormData) => ({
...formData,
checkedUsers: prevFormData.checkedUsers.map((item) => {
if (item.id === userData.id) {
return {
...item,
readOnlyAccess: false,
readAndEditAccess: false,
};
}
return item;
}),
}));
const changedRecordIndex = formData.checkedUsers.findIndex((item) => item.id === userData.id)
const updatedUserData = formData.checkedUsers[changedRecordIndex];
isAccessToRecord(updatedUserData);
console.log(updatedUserData);
}
}
};
console.log(formData);
useEffect(() => {}, [formData])
在函数“handlUpdateCheckedUser”中,我更新状态“checkedUsers”,在同一函数中,我将新状态放入函数“isAccessToRecord”中(但有旧状态)。 外面的 Console.log 向我展示了新的价值。我不知道如何解决这个问题。
如果您想在
isAccessToRecord
完成后调用 setFormData
,您应该在 formData
上使用带有依赖数组的 useEffect:
useEffect(() => {
const changedRecordIndex = formData.checkedUsers.findIndex((item) => item.id === userData.id)
const updatedUserData = formData.checkedUsers[changedRecordIndex];
isAccessToRecord(updatedUserData);
}, [formData])