Given the following code:
I am expecting staticData not to change when gridData does.
import { useState } from "react";
import "./styles.css";
const CheckData = (props) => {
return (
<>
<h1>Data From {props.ds}</h1>
{props.items.map((row) => (
<div key={row.recordid}>{row.companyname}</div>
))}
</>
);
};
export default function App() {
const [gridData, setGridData] = useState([
{recordid: 1,companyname: "Devshare"},
{recordid: 2,companyname: "Shufflebeat"},
{recordid: 3,companyname: "Mita"}
]);
const staticData = [...gridData];
const changeValue = () => {
let nd = gridData;
nd[2]["companyname"] = "Superman";
setGridData([...nd]);
};
return (
<div className="App">
<CheckData ds="gridData" items={gridData} />
<CheckData ds="staticData" items={staticData} />
<button style={{ marginTop: "50px" }} onClick={changeValue}>
Change a value in gridData
</button>
</div>
);
}
Why does value in staticData change when gridData does? I thought I made a copy of the object - not create an instance.
_.cloneDeep()lodash.com/docs/4.17.15#cloneDeepstaticDatafrom what's ingridData. Why would it ever be different than what's ingridData?[...gridData]make an effective copy rather than an instance?