▶ OptionAPI는 data(), methods, computed 등 옵션으로 나눠서 데이터 저장소라 생각하면서 코딩했다.
<script>
export default {
// data()에서 반환된 속성들은 반응적인 상태가 되어
// `this`에 노출됩니다.
data() {
return {
count: 0
}
},
// methods는 속성 값을 변경하고 업데이트 할 수 있는 함수.
// 템플릿 내에서 이벤트 헨들러로 바인딩 될 수 있음.
methods: {
increment() {
this.count++
}
},
// 생명주기 훅(Lifecycle hooks)은 컴포넌트 생명주기의
// 여러 단계에서 호출됩니다.
// 이 함수는 컴포넌트가 마운트 된 후 호출됩니다.
mounted() {
console.log(`숫자 세기의 초기값은 ${ this.count } 입니다.`)
}
}
</script>
<template>
<button @click="increment">숫자 세기: {{ count }}</button>
</template>
▶ Vue3에서는 이런식으로 쓴다고 한다.
<script setup> 방식 = SFC 안에서 컴포넌트를 간편하게 생성하는 현대식 방법
setup() 함수를 생략한 상태에서 바로 변수나 함수 선언이 가능하다고 한다.
<script setup>
import { ref, onMounted } from 'vue'
// 반응적인 상태의 속성
const count = ref(0)
// 속성 값을 변경하고 업데이트 할 수 있는 함수.
function increment() {
count.value++
}
// 생명 주기 훅
onMounted(() => {
console.log(`숫자 세기의 초기값은 ${ count.value } 입니다.`)
})
</script>
<template>
<button @click="increment">숫자 세기: {{ count }}</button>
</template>
함수를 조합(Composition)하듯이 코드를 구성한다고 해서 "Composition API"라고 부른다고 하는데요 .....
어제 코딩애플님 Vue강의 참고해서 만든 부동산 홈페이지는 OptionAPI 였다니...
어쨌든 setup() 이 API 방식으로 선언한다는 것은~ 기존 옵션 기반이 아닌 Vue의 Composition API 문법으로 선언한다 의미
- Vue 홈페이지 ex)
아래 예제는 createApp() 방식으로 Vue를 손수 조립해서 만드는 수작업 방식. 하나의 진입점용
setup() 함수 안에 모든 걸 넣어서 실행
* createApp : Vue 애플리케이션을 생성하는 함수. Vue 앱 전체를 생성하는 함수. Vue 앱을 시작할 때 사용하는 기본 함수
=> 보통 main.js 나 main.ts 에서 사용
* ref : 반응형 변수(데이터)를 만들 때 사용하는 Vue 함수
= 값이 바뀔 때 자동으로 화면(UI)이 갱신되는 변수
또한 !! ref 로 만든 변수는 값에 접근할 때 .value 로 해야한다. 그냥 변수명++; 은 에러 !
import { createApp, ref } from 'vue'
createApp({
setup() {
return {
count: ref(0)
}
}
}).mount('#app')
● createApp { }
: 중괄호 안에는 이 앱의 기능들(옵션)이 들어간다.
● setup() { }
: Composition API의 핵심 함수. 컴포넌트가 시작될 때 실행되는 부분. 여기에 데이터, 함수 등을 정의하고 Vue에 넘겨준다.
● return { count: ref(0) }
: count라는 반응형 변수를 만들어서 Vue에 넘겨준다.
ref(0)은 count 라는 값을 0으로 시작하는 반응형 변수로 만든다는 뜻이다. count라는 숫자가 있지만, 값이 변하면 화면도 자동으로 갱신된다.
● .mount('#app)
: 위에 만든 Vue App을 #app 요소에 연결 = Vue가 이 DOM을 관리하게 되는 시점이다
그리고 html에
<div id="app">
<button @click="count++">+</button>
<p>{{ count }}</p>
</div>
결과

참고로 예전에 배운 순수 JS로는 이렇게 짰다. 값이 변경되면 직접 다시 넣어줘야 했다.
<div id="app">
<button onclick="increase()">+</button>
<p id="count">0</p>
</div>
<script>
let count = 0;
function increase() {
count++;
document.getElementById('count').textContent = count;
}
</script>'웹 개발 > Vue' 카테고리의 다른 글
| [Vue3] v- 지시자 directive (0) | 2025.05.15 |
|---|---|
| [Vue3] LifeCycle hook, mount (0) | 2025.05.14 |
| [Vue3] import / export (0) | 2025.05.14 |
| [Vue3 Opt] 부동산 홈페이지 생성 5 - 상품 목록(import/export) (0) | 2025.05.14 |
| [Vue3 Opt] 부동산 홈페이지 생성 4 - 모달창 (0) | 2025.05.13 |