I'm using a useEffect hook to trigger a setState update. I'm getting some strange and inconsistent behaviour from the previous param:
useEffect(() => {
setCurrentPicturesObject((existing) => {
const clone = {...existing}
console.log({
existing,
existingdotNocolor: existing.nocolor,
selectedColorState,
selectedColorArray: existing["nocolor"],
clone
});
return existing
});
}, [selectedColorState]);
So you'd expect that the clone of the object would return an object with the same keys and values, right? Not here:
Somehow existing goes from being an object with a nocolor prop with an array of two strings, to switching to an array with one string. Similarly when I try to access the nocolor prop it only returns an array with one string.
I can't understand. existing changes as soon as I try to access it with anything other than simply console logging it directly?
Not entirely sure on the details, but essentially it seems that the console is logging a live view of the object, which is a static string. More info in this answer.