Vue.set() 제대로 이해하기 - 왜, 언제 사용해야 할까?
Vue.js를 사용하다 보면 데이터를 갱신할 때 그냥 객체에 값을 할당했는데 화면에 반영이 안 되는 경우가 있습니다. 이럴 때 해결 방법으로 자주 등장하는 것이 바로 Vue.set()
입니다.
이번 글에서는 Vue.set()이 무엇이고, 왜 필요한지, 그리고 어떻게 사용하는지 쉽게 정리해보겠습니다.
Vue.set()이란?
Vue.set()은 Vue의 반응성 시스템(Reactivity System)과 관련된 메서드입니다. Vue는 객체를 생성할 때 내부적으로 데이터에 반응성을 설정하지만, 이후에 새로운 속성을 추가하면 이 변화를 감지하지 못합니다.
이 문제를 해결하기 위해 사용하는 것이 Vue.set()입니다. 기존 객체에 새로운 속성을 추가하거나 배열을 변경할 때, Vue가 그 변화를 인식할 수 있도록 강제로 반응성을 추가해주는 역할을 합니다.
왜 Vue.set()이 필요한가?
Vue는 컴포넌트가 생성될 때 미리 정의된 데이터 속성에 대해서만 반응성을 설정합니다. 따라서 다음과 같이 새로운 속성을 직접 추가하면 화면에 반영되지 않습니다.
this.user.name = 'John'; // ✅ 이미 있던 속성은 잘 반영됨
this.user.age = 30; // ❌ 새로 추가한 속성은 반응성이 없음
이럴 때 Vue.set()
을 사용해야 합니다.
Vue.set(this.user, 'age', 30);
이렇게 하면 'age'라는 새로운 속성도 반응성을 가지게 되어 화면에 정상적으로 반영됩니다.
사용 방법
Vue.set()은 세 개의 인자를 받습니다.
- 첫 번째 인자: 대상 객체 또는 배열
- 두 번째 인자: 새로 추가할 속성명(또는 배열 인덱스)
- 세 번째 인자: 새로 설정할 값
예시:
// 객체에 새로운 속성 추가
Vue.set(this.user, 'email', 'test@example.com');
// 배열 요소 변경
Vue.set(this.items, 2, '새로운 아이템');
주의할 점
Vue 2에서는 반드시 Vue.set()
을 사용해야 새로운 속성에 반응성을 부여할 수 있습니다. 하지만 Vue 3부터는 Proxy 기반 반응성 시스템이 도입되어, 굳이 Vue.set()을 사용할 필요가 줄어들었습니다. (Vue 3에서는 그냥 객체에 새로운 속성을 추가해도 반응성이 유지됩니다.)
정리
Vue.set()은 Vue 2.x 버전에서 반응성을 보장하기 위해 꼭 필요한 메서드입니다. 객체나 배열에 새 속성을 추가할 때 화면이 갱신되지 않는다면, Vue.set()을 사용해서 문제를 해결할 수 있습니다.
특히 Vue 2를 사용하는 프로젝트에서는 새로운 데이터를 추가하거나 수정할 때 항상 '반응성이 유지되는지'를 의식하면서 개발하는 것이 중요합니다.
Vue.set(), 꼭 기억해두세요!
'업무 > 에러 노트' 카테고리의 다른 글
[JAVA] java stream sort null pointer exception (0) | 2022.02.28 |
---|---|
[JAVA] setTimeZone (0) | 2022.02.25 |
[SQL] DATEDIFF, TIMEDIFF (0) | 2022.02.22 |
[JAVA] Comparator.comparing().reversed() (0) | 2022.02.17 |
[JAVA] 조건절 (0) | 2022.02.16 |