일반적인 나머지 연산자를 사용한 복사는
객체 내부의 객체까지 깊은 복사가 되지 않는다. (주소값만 가져옴)
const person = {
name: "김이름",
age: 40,
address : {
}
}
-> address는 주소만 복사가 됨.
yarn add immer
import { produce } from 'immer';
const nextState = produce(originalState, draft => {
// 바꾸고 싶은 값 바꾸기
draft.somewhere.deep.inside = 5;
})
setItems((prevItems) =>
prevItems.map((item) =>
item.id === id ? { ...item, done: !item.done } : item,
),
);
//immer 사용
setItems(
produce((draft) => {
draft.forEach((item) =>
item.id === id && (item.done = !item.done),
);
}),
);
foreach를 사용할 수 있음. 원래 foreach는 새로
운 주소를 가진 배열을 생성하지 않지만 immer을 사용함면 무관하게 사용가능하다.
(push, foreach.. 등)