* 원시값이란? 불변한값
원시값의 종류
1. 문자열(string)
2. 숫자(number)
3. 불리언(Boolean)
4. null과 undefined
*객체(Object) 객체는 프로퍼티(속성)를 포함하며, 프로퍼티는 값을 가지거나 다른 객체를 참조
let person = {
name: "John",
age: 30,
city: "New York"
};
*깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy)
1. 깊은 복사(Deep Copy)
원본 객체와 복사본이 완전히 독립적으로 되도록 하는 방법
// 깊은 복사 예제
let originalObject = { name: "John", address: { city: "New York" } };
let deepCopyObject = JSON.parse(JSON.stringify(originalObject));
let deepCopyObject = cloneDeep(originalObject);
2. 얕은 복사(Shallow Copy)
얕은 복사는 객체를 복사할 때, 최상위 레벨의 프로퍼티만을 복사하는 것
// 얕은 복사 예제
let originalObject = { name: "John", address: { city: "New York" } };
let shallowCopyObject = { ...originalObject };
추가
이러한 불변성 때문에 앵귤러 프로젝트를 사용할때 이슈가 있었다.
@Input 으로 데이터를 주고 받는 과정에서 제대로 값이 바뀌지않는 이슈였다.
비슷한 이슈가 있을수 있으니 한번 그부분도 정리해보겠다.
1. 객체 전체를 갈아엎기:
// 부모 컴포넌트에서
this.parentObject = { ...this.parentObject, property: "new value" };
2.OnChanges 사용:
// 자식 컴포넌트에서
ngOnChanges(changes: SimpleChanges) {
if (changes.inputObject) {
this.internalState = { ...changes.inputObject.currentValue };
}
}
3. 객체 타입이 아니라 원시값으로 Input 변경
기존 객체 방식의 코드
- 오브젝트 전체를 전달하는 방식이었다
<app-calendar [time]="searchCondition"><app-calendar>
원시값으로 변경한 방식의 코드
- 스트링으로 시간 데이터만 전달했다
<app-calendar [time]="searchCondition.filter.time"><app-calendar>
3번째 방법으로 수정하니깐 변화감지가 제대로 되서 이슈를 해결했다. 매우 굳
반응형
'JavaScript' 카테고리의 다른 글
JavaScript(JS) 자바스크립트 동작원리 (0) | 2024.05.11 |
---|---|
SEO - meta tag (og:description, description 차이점) (3) | 2024.01.05 |
Jest를 사용한 JavaScript Test - 심화 (0) | 2023.10.19 |
Jest를 사용한 JavaScript Test - 기본 (0) | 2023.10.19 |
JavaScript(JS) - kendo-ui / grid (0) | 2023.03.24 |