Vue3에서는 Composition API를 새롭게 등장시켰습니다. 기존의 인스턴스 옵션 단위가 아닌, 특정 기능이나 논리의 단위로 여러 컴포넌트에서 재사용할 수 있도록 하였습니다.
이 중 ref
와 reactive
를 활용하면 컴포넌트와 별개로 사용할 수 있는 반응형 데이터를 생성할 수 있습니다.
버튼을 클릭하면 값이 변경되는 예제로 살펴봅시다.
<template>
<div>
<div class="name">{{ name }}</div>
<button @click="updateName">Click</button>
</div>
</template>
<script>
import { ref } from "vue";
export default {
setup() {
const name = ref("Summer");
const updateName = () => {
name.value = "Yeonsu";
};
return {
name,
updateName,
};
},
};
</script>
새롭게 정의된 ref
Vue3 이전에는 뷰 템플릿의 DOM 또는 컴포넌트를 가리키는 속성이었지만, Vue3에서는
reactive reference
를 의미합니다.ref 사용하는 방법
<script>
에import { ref } from "vue";
을 임포트합니다.- 변수를 선언하고 값을
ref()
로 감싸줍니다.- 변수 값을 변경할 때
변수.value
에 변경할 값을 넣어줍니다.
<template>
<div>
<div class="name">{{ name }}</div>
<button @click="updateName">Click</button>
</div>
</template>
<script>
import { reactive } from "vue";
export default {
setup() {
const name = reactive({
id: 1,
});
const updateName = () => {
name.id = 2;
};
return {
name,
updateName,
};
},
};
</script>
reactive 사용하는 방법
<script>
에import { reactive } from "vue";
을 임포트합니다.- 변수를 선언하고 값을
reactive()
로 감싸줍니다.- property 값을 변경할 때
변수.property
에 변경할 값을 넣어줍니다.주의할 점
reactive는 object, array 이외에는 사용할 수 없습니다.
타입 제한
ref
에서는 String
, Number
, Object
등 어떠한 타입에서도 사용할 수 있습니다.
반면 reactive
에서는 Object
, array
, Map
, Set
과 같은 타입에서만 사용할 수 있습니다.
접근 방식
ref
에서는 .value
property를 붙여 접근할 수 있습니다. <templete>
에서 변수를 명시할 때에는 붙일 필요가 없습니다.
reactive
에서는 .value
를 붙일 필요가 없이 <templete>
에서 사용하는 자바스크립트 문법처럼 사용하시면 됩니다.
정답은 없지만 각자 장점을 생각해 적합한 것을 사용하면 되겠습니다.
ref의 장점
- 타입 제한 없이 사용 가능함
- 템플릿에서 단일 변수로 사용할 수 있음
reactive의 장점
- 자바스크립트와 템플릿 사이에 일관성이 있음
- 반응형 변수를 많이 선언할 때 간단하게 사용 가능
- Vue2의
data()
와 비슷함