1. 전개 연산자(...문법)를 사용하여 객체나 배열 내부의 값을 복사할 때는, 얕은 복사(shallow copy)를 하게 된다.
얕은 복사란?
Call by Refrence~ 즉 주소값만 복사하여 레퍼런스 변수가 서로 같은 객체나 배열을 가리키게 만드는 것!
2. 얕은 복사를 하게 되면, 가장 바깥쪽에 있는 값만 복사된다.
3. 따라서 업데이트하고 싶은 값의 내부의 값이 객체 혹은 배열이라면,
const todos = [{ id : 1, checked: true}, { id : 2, checked: true }];
const nextTodos = [...todos];
내부의 값을 !!따로!! 복사해 주어야 한다.
nextTodos[0] = {
...nextTodos[0],
checked: false // 배열 내부의 값을 수정해야 하므로, ...nextTodos[i] 값을 따로 또 복사해 주어야 함.
}; // 새로운 객체 할당
따라서 만약 객체의 경우에도, 객체 안의 객체에 불변성을 지키며 새 값을 할당해야 하는 경우,
const nextComplexObject = {
...complexObject,
objectInside: {
...complexObject.objectInside, // 객체 속 객체를 따로 복사
enabled: false //객체 속 객체 내부의 값에 새로운 값 할당
}
};
위와 같이 객체 속 객체를 따로 복사해 주어야 한다!!
'꼬리에 꼬리를 무는 코딩' 카테고리의 다른 글
2022.10.02 꼬꼬코 immer 라이브러리 심화 (0) | 2022.10.03 |
---|---|
2022.10.01 꼬꼬코 immer 라이브러리 (0) | 2022.10.02 |
2022.09.30 꼬꼬코 react-virtualized 를 사용한 렌더링 최적화 (1) | 2022.09.30 |
2022.09.29 꼬꼬코 React.memo 를 사용한 컴포넌트 성능 최적화 (1) | 2022.09.29 |
2022.09.27 꼬꼬코란 무엇인가? + C언어 Int 배열의 초기화와 메모리 할당 (0) | 2022.09.27 |
댓글