NOHOUS: Ok, když už teda chceš mít lokální kopii velkých dat (což není úplně ideální návrh), tak do určité velikosti dat (řekněme do délky 10k) je pořád nejlepší udělat shallow-copy listu a pak udělat změnu na té kopii a dosadit kopii do dat. Je to nejjednodušší a zabere to maximálne pár ms.
Pokud máš dat víc, tak hodně záleží na tom, jaké operace chceš přesně dělat. Například - pokud v listu budeš jen měnit data ale nebudeš přidávat a odebírat nové položky, nemusíš to implementovat jako prosté pole, ale můžeš vymyslet o něco složitější strukturu.
Samozřejmě, jak jsem řekl už dřív, v Reactu tě nikdo nenutí používat immutables, tj. klidně si to můžeš zmutovat napřímo - akorát pak musíš pořešit detekci změn - což je nesnažší udělat přes sekundární proměnnou last-updated/version, kterou změníš pokaždé, když změníš pole.
Tyhle věci se v Reactu naprosto běžně používají, ale jelikož je to víc low-level, tak se to často skrývá do nějakých custom hooks.
A tím bych tohle offtopic téma uzavřel.