reactjs 无法在useEffect中获取更新的状态值

eivgtgni  于 5个月前  发布在  React
关注(0)|答案(1)|浏览(68)

我试图更新状态,这是通过Map通过以前的状态值的对象数组,我已经记录在jxs返回之前和另一个日志内useEffect与依赖相同的状态值。我记录更新状态值在jsx返回之前的日志,但记录旧的状态值内useEffect。

setSelectedAccountData((prevData) =>
      prevData.map((data, i) => {
        if (
          name === UPDATE_TYPE.ACCOUNT_ID &&
          value === null &&
          data.Id === accountId
        ) {
          return { ...data, Debit: 0, Credit: 0 };
        }  else {
          return { ...data };
        }
      })
    );
 useEffect(() => {

    console.log('State updated:', selectedAccountData);
  }, [selectedAccountData]);

字符串

enyaitl3

enyaitl31#

您遇到的问题可能是由于React中状态更新的异步性质。当您调用setSelectedAccountData时,React不会立即更新状态。相反,它会安排更新,并且新的状态值在调用后不可用。
要记录更新的状态,您应该使用setSelectedAccountData提供的回调函数:

setSelectedAccountData((prevData) => {
  const updatedData = prevData.map((data, i) => {
    if (
      name === UPDATE_TYPE.ACCOUNT_ID &&
      value === null &&
      data.Id === accountId
    ) {
      return { ...data, Debit: 0, Credit: 0 };
    } else {
      return { ...data };
    }
  });

  // Log the updated state here
  console.log('State updated:', updatedData);

  return updatedData; // Return the updated data to set the state
});

字符串
通过这样做,您可以确保在更新状态后记录状态。
然后,您的useEffect应该正确地记录更新的状态:

useEffect(() => {
  console.log('State updated:', selectedAccountData);
}, [selectedAccountData]);

相关问题