반응형
this.$set: 반응성 유지 위한 방법
Vue.js는 반응성 시스템을 통해 데이터의 변경을 감지하고 자동으로 화면을 업데이트 해줍니다. 객체의 속성을 변경하는 경우 Vue의 반응성이 정상 작동하지만, 특정 상황에서는 반응성이 제대로 작동하지 않을 수 있습니다. 이런 경우, `this.$set`을 사용하여 Vue에 변경 사항을 명시적으로 알려주어 반응성을 유지할 수 있습니다.
💁♂️ 객체의 속성을 변경은 아래 코드 처럼 간단히 값을 할당하면 됩니다.
<template>
<div>
<p>{{ message }}</p>
<button @click="changeMessage">Change Message</button>
</div>
</template>
<script>
export default {
data() {
return {
message: 'BEFORE',
};
},
methods: {
changeMessage() {
this.message = 'AFTER';
},
},
};
</script>
this.$set을 사용하는 경우
1. 배열에 인덱스로 값을 추가할 때
Vue는 배열의 길이를 관찰할 수 있지만, 배열에 값을 추가할 때 일반적인 `인덱스로 할당`하면 반응성이 제대로 작동하지 않을 수 있습니다.
export default {
data() {
return {
items: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' }
],
};
},
methods: {
addItem() {
// 일반적인 방식으로 배열에 값을 추가하면 반응성이 제대로 작동하지 않음
// this.items.push({ id: 3, name: 'Item 3' });
// this.$set을 사용하여 배열에 값을 추가함
this.$set(this.items, this.items.length, { id: 3, name: 'Item 3' });
},
},
};
2. 객체에 동적으로 속성을 추가할 때
Vue 인스턴스나 컴포넌트의 data 객체에 새로운 속성을 동적으로 추가하는 경우에도 this.$set을 사용해야 합니다. Vue는 인스턴스가 생성될 때 data 객체의 속성들만 반응성을 감지하기 때문에 동적으로 추가되는 속성은 반응성이 제대로 작동하지 않습니다.
export default {
data() {
return {
dynamicData: {
initialData: 'Initial Value',
},
};
},
methods: {
addDynamicData(newData, newValue) {
// 일반적인 방식으로 객체에 속성을 동적으로 추가하면 반응성이 제대로 작동하지 않음
// this.dynamicData.newData = NewValue;
// this.$set을 사용하여 객체에 동적으로 속성을 추가함
this.$set(this.dynamicData, newData, newValue);
},
},
};
반응형
'Front-End > Vue.js' 카테고리의 다른 글
Vue.js vue-infinite-loading을 사용한 무한 스크롤 구현하기 (0) | 2023.10.19 |
---|---|
Vue.js mixin 사용 방법: 코드 재사용 및 컴포넌트 공유 (0) | 2023.10.16 |
Vue.js Vuex store: Vue.js 어플리케이션의 상태 관리를 해결하는 방법 (0) | 2023.07.25 |
Vue.js Vue에서 배열(Array) 변경 감지하기 (0) | 2023.07.13 |
Vue.js ref 속성으로 요소와 컴포넌트에 쉽게 접근하기 (0) | 2023.07.12 |