React 函数中的旧状态值

问题描述 投票:0回答:1

我的反应状态有问题。我正在创建具有基本空值的状态。然后我使用设置状态值的函数,然后将新的状态值(正如我所想的)带入下一个函数。但我的状态有旧的价值。当我在函数内部调用 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 向我展示了新的价值。我不知道如何解决这个问题。

reactjs react-hooks state
1个回答
0
投票

如果您想在

isAccessToRecord
完成后调用
setFormData
,您应该在
formData
上使用带有依赖数组的 useEffect:

useEffect(() => {
    const changedRecordIndex = formData.checkedUsers.findIndex((item) => item.id === userData.id)
    const updatedUserData = formData.checkedUsers[changedRecordIndex];
    isAccessToRecord(updatedUserData);
}, [formData])
© www.soinside.com 2019 - 2024. All rights reserved.