Vue SFC는 HTML, CSS 및 JavaScript를 단일 파일로 합친 것
<template>, <script>, <style> 블록은 하나의 파일에서 컴포넌트의 뷰, 로직 및 스타일을 독립적으로 배치
<template>
<div class="greeting">{{ msg }}</div>
</template>
<script setup>
import { ref } from "vue";
const msg = ref("Hello World!");
</script>
<style scoped>
.greeting {
color: red;
}
</style>
각 *.vue 파일은 세 가지 유형의 최상위 언어 블록 <template>, <script>, <style>으로 구성됨
<template>
<div class="greeting">{{ msg }}</div>
</template>
<script setup>
import { ref } from "vue";
const msg = ref("Hello World!");
</script>
<style scoped>
.greeting {
color: red;
}
</style>
<template><template> 블록을 하나만 포함할 수 있음<script setup><script setup> 블록을 하나만 포함할 수 있음<style scoped><style>태그가 포함될 수 있음초기에 생성된 모든 컴포넌트 삭제 (App.vue 제외)
App.vue 코드 초기화
<template>
<h1>App.vue</h1>
</template>
<script setup></script>
MyComponet.vue 생성
<template>
<div>
<h2>MyComponent</h2>
</div>
</template>
<script setup></script>
App 컴포넌트에 MyComponent를 등록
<template>
<h1>App.vue</h1>
<MyComponent />
</template>
<script setup>
import MyComponent from "@/componets/MyComponet.vue";
</script>
App(부모) - MyComponent(자식) 관계 형성
"@" - "src/" 경로를 뜻하는 약어
MyComponentItem은 MyComponent의 자식 컴포넌트
<template>
<div>
<h2>MyComponent</h2>
<MyComponentItem />
<MyComponentItem />
<MyComponentItem />
</div>
</template>
<script setup>
import MyComponent from "@/componets/MyComponetItem.vue";
</script>
ref 속성을 사용하여 특정 DOM 엘리먼트에 직접적인 참조를 얻을 수 있음
<template>
<input ref="input" />
</template>
<script setup>
import { ref, onMounted } from "vue";
const input = ref(null);
onMounted(() => {
console.log(input.value);
});
</script>
import 해서 가져온 API 함수들을 사용하여 컴포넌트의 로직을 정의
Vue3 에서의 권장 방식
<template>
<button @click="increment">{{ count }}</button>
</template>
<script setup>
import { ref, onMounted } from "vue";
const count = ref(0);
function increment() {
count.value++;
}
onMounted(() => {
console.log(`숫자 세기의 초기 값은 ${count.value}`);
});
</script>
data, methods 및 mount 같은 객체를 사용하여 컴포넌트의 로직을 정의
Vue2에서의 작성 방식
<template>
<button @click="increment">{{ count }}</button>
</template>
<script>
export default{
data(){
return {
count:0
}
}
}
methods:{
increment(){
this.count++
}
},
mounted(() => {
console.log(`숫자 세기의 초기 값은 ${this.count}`);
});
</script>
<style scroped></style>