Front-end/Vue
Vue.js) 컴포지션API - 반응형 데이터
ljs981026
2024. 7. 31. 17:34
1. 컴포지션 API
Vue.js에서 컴포지션 API(Composition API)는 Vue3에서 도입되었으며, 복잡한 로직을 보다 모듈화 하고 재사용 가능하게 만드는 데 도움이 됩니다. 컴포지션 API는 주로 setup 함수를 통해 사용됩니다.
- setup
- setup 함수는 Vue 컴포넌트의 초기 단계에서 호출되며, props와 context를 인자로 받을 수 있습니다. 내부에서 반응형 상태, 라이프 사이클 훅 등을 정의할 수 있습니다.
- 반응형 상태
- ref: 단일 값의 반응형 상태를 생성합니다.
- reactive: 객체의 반응형 상태를 생성합니다.
- computed
- computed 함수를 사용하여 종속성에 따라 자동으로 업데이트 되는 계산된 속성을 정의합니다.
- watch
- watch 함수를 사용하여 특정 데이터의 변화를 감지하고 부수 효과를 실행할 수 있습니다.
2. 컴포지션API로 변환하기
<template>
<div @click="increase">{{ count }}</div>
</template>
<script>
export default {
data() {
return {
count: 0,
};
},
methods: {
increase() {
this.count += 1;
},
},
};
</script>
div를 클릭하면 increase 메서드에 의해 count가 1씩 증가하는 코드입니다. 이를 컴포지션 API로 변환하겠습니다.
<template>
<div @click="increase">{{ count }}</div>
</template>
<script>
export default {
setup() {
let count = 0;
function increase() {
count += 1;
}
return {
count,
increase,
};
},
};
</script>
setup 내부에 count와 increase를 정의해주고 return 합니다. 하지만 이 상태에서 div를 클릭하여도 count는 반응성을 가지지 않습니다. 반응성을 가지기 위해선 Vue에서 Ref를 사용해야 합니다. 다음은 수정한 코드입니다.
<template>
<div @click="increase">{{ count }}</div>
</template>
<script>
import {ref} from 'vue';
export default {
setup() {
let count = ref(0);
function increase() {
count.value += 1;
}
return {
count,
increase,
};
},
};
</script>
ref를 사용하여 count란 데이터가 반응성을 가지도록 할 수 있습니다. ref(["초기값"]) 형태로 사용할 수 있습니다. 여기서 주의해야할 점은 count는 ref() 객체 이기 때문에 increase 내부 로직에 count.value += 1로 count의 value에 대해 연산을 해주어야 합니다.