React setState hook 之前的 param 对象给出了不一致的值
Posted
技术标签:
【中文标题】React setState hook 之前的 param 对象给出了不一致的值【英文标题】:React setState hook's previous param object gives inconsistent values 【发布时间】:2021-12-27 11:16:29 【问题描述】:我正在使用useEffect
挂钩来触发 setState 更新。我从 previous 参数中得到了一些奇怪且不一致的行为:
useEffect(() =>
setCurrentPicturesObject((existing) =>
const clone = ...existing
console.log(
existing,
existingdotNocolor: existing.nocolor,
selectedColorState,
selectedColorArray: existing["nocolor"],
clone
);
return existing
);
, [selectedColorState]);
所以你会期望对象的克隆会返回一个具有相同键和值的对象,对吧?不在这里:
不知何故,existing
从一个带有 nocolor
属性和两个字符串数组的对象变成了一个带有一个字符串的数组。同样,当我尝试访问 nocolor
道具时,它只返回一个带有一个字符串的数组。
我不明白。 existing
会在我尝试通过控制台直接记录以外的任何方式访问它时立即更改?
【问题讨论】:
在setCurrentPicturesObject
的回调函数里面,你的意思是返回clone
而不是existing
吗?
否 - 返回值并不重要。我只是把任何东西放在那里以显示一个工作功能。问题是无论我尝试做什么来更新existing
状态,它都会恢复到不同/错误的状态。我试图了解原因,以便避免/解决问题。
现有状态是如何定义的?
你能创建一个最小的演示来解决你的问题吗?目前,您只需返回现有状态。您共享的代码无助于确定问题的原因。
@hade 和 Yousaf,这相当复杂。我想没有人知道,一般来说,一个参数给出同时、不一致的值的原因可能是什么?
【参考方案1】:
不完全确定细节,但基本上控制台似乎正在记录对象的实时视图,这是一个静态字符串。更多信息在this answer。
【讨论】:
以上是关于React setState hook 之前的 param 对象给出了不一致的值的主要内容,如果未能解决你的问题,请参考以下文章
react-hooks 查询和 setState 导致 500 错误
react Hook踩坑指北—一文解决你所有关于setState的疑惑