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的疑惑

React Hooks:跳过多个连续 setState 调用的重新渲染

React Hooks setState 数组中的元素

React Hook SetState 导致无限循环

React Hooks