[
{ "id" : 0, "name" : "_Limvely", "image" : "https://picsum.photos/200?r=0" },
{ "id" : 1, "name" : "salmon_X", "image" : "https://picsum.photos/200?r=1" },
{ "id" : 2, "name" : "360noscope", "image" : "https://picsum.photos/200?r=2" },
{ "id" : 3, "name" : "Jeony_1", "image" : "https://picsum.photos/200?r=3" },
{ "id" : 4, "name" : "mihyeon", "image" : "https://picsum.photos/200?r=4" }
]내 팔로워 목록을 보여주는 간단한 페이지를 만들어보며 Composition API 사용법을 익힙니다.
<template>
<div style="padding: 10px">
<h4>팔로워</h4>
<input placeholder="?" />
<div class="post-header">
<div class="profile"></div>
<span class="profile-name">사용자명</span>
</div>
<!-- 예시: 팔로워 데이터를 화면에 출력 -->
<ul>
<li v-for="item in follower" :key="item.id">
<img :src="item.image" alt="프로필 이미지" width="50" />
{{ item.name }}
</li>
</ul>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import axios from 'axios'
// Composition API로 팔로워 배열 데이터 생성
const follower = ref([])
// 컴포넌트 마운트 후 Ajax 요청으로 데이터 로드
onMounted(() => {
axios.get('/follower.json').then(response => {
follower.value = response.data
})
})
</script>
※ 기존 Options API 문법 (Vue 2)에서는 data()와 setup() 안에서 return { follower } 했었으나, Vue 3의 문법에서는 return 없이 바로 template에서 사용할 수 있습니다.
<template>
<div v-if="step === 3">
<MyPage />
</div>
</template>
<script setup>
import { ref } from 'vue'
import MyPage from './MyPage.vue'
</script>
<template>
<Container />
</template>
<script setup>
import Container from './Container.vue'
</script>
※ 기존에는 App.vue에서 data() { return { step: 3 } }로 강제로 step을 3으로 설정했지만, Container.vue에서 이미 Composition API로 처리하므로 App.vue는 간결하게 컴포넌트만 불러오면 됩니다.
ref() 함수를 사용합니다.<script setup>
import { ref } from 'vue'
const follower = ref([]) // 초기값 []
</script>
.value를 사용합니다.follower.value = response.data
onMounted(), onBeforeUpdate() 등으로 사용합니다.<script setup>
import { ref, onMounted } from 'vue'
import axios from 'axios'
const follower = ref([])
onMounted(() => {
axios.get('/follower.json').then(response => {
follower.value = response.data
})
})
</script>
※ created()는 Composition API의 setup() 내부에 코드를 작성하는 것과 유사하므로 onCreated()라는 함수는 없습니다.요즘은 <script setup>을 사용하여 코드가 더욱 간결해졌습니다.
예시:
<script setup>
import { ref } from 'vue'
const follower = ref([1, 2, 3])
</script>
<template>
<div>{{ follower }}</div>
</template>
<script setup> 내에서 선언한 변수는 자동으로 template에 노출되므로 return할 필요가 없습니다.<script setup>
import { ref, onMounted } from 'vue'
import axios from 'axios'
const follower = ref([])
onMounted(() => {
axios
.get('/follower.json')
.then(response => {
follower.value = response.data
})
})
</script>
<template>
<div v-for="item in follower" :key="item.id">
{{ item.name }}
</div>
</template>
※ Vue 2 Options API에서는 return { follower }로 반환했지만, Composition API에서는 필요 없습니다.
예시:
<script setup>
import { onMounted, onBeforeUpdate } from 'vue'
onMounted(() => {
// 마운트 후 실행할 코드
})
onBeforeUpdate(() => {
// 업데이트 직전 실행할 코드
})
</script>