불변성이 지켜지지 않으면 객체 내부의 값이 새로워져도 바뀐 것을 감지하지 못합니다. 그러면 React.memo에서 서로 비교하여 최적화하는 것이 불가능하겠지요?
추가로 전개 연산자(... 문법)를 사용하여 객체나 배열 내부의 값을 복사할 때는 얕은 복사(shallow copy)를 하게 됩니다. 즉, 내부의 값이 완전히 새로 복사되는 것이 아니라 가장 바깥쪽에 있는 값만 복사됩니다. 따라서 내부의 값이 객체 혹은 배열이라면 내부의 값 또한 따로 복사해 주어야 합니다. 다음 코드를 읽어 보면 쉽게 이해될 것입니다.
예시 코드
const todos = [{ id: 1, checked: true }, { id: 2, checked: true }]; const nextTodos = [...todos]; nextTodos[0].checked = false; console.log(todos[0] === nextTodos[0]); // 아직까지는 똑같은 객체를 가리키고 있기 때문에 true nextTodos[0] = { ...nextTodos[0], checked: false }; console.log(todos[0] === nextTodos[0]); // 새로운 객체를 할당해 주었기에 false