Grace
grace's dev_note
Grace
전체 방문자
오늘
어제
  • 분류 전체보기
    • FrontEnd
      • Next.js
      • React
      • ReactNativ..
      • Vue
    • Javascript
      • 러닝 자바스크립트
      • 모던 자바스크립트
    • CS
    • DataScienc..
      • Data Struc..
      • LeetCode
    • BackEnd
      • Express
      • Node.js
      • Nest.js
    • DevOps
      • Docker
    • 매일메일
    • 회고
    • 코드캠프

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • javascript
  • Vue.js
  • vitejs
  • nest.js
  • backend
  • 함수
  • vue-query
  • Express
  • postgres
  • PostgreSQL
  • node.js
  • 자바스크립트
  • 번들러
  • tanstack
  • Vue
  • 알고리즘
  • Vite
  • Vue3
  • React Native
  • pinia

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Grace

grace's dev_note

FrontEnd/Vue

[Vue3] Dynamic component

2023. 4. 17. 16:13

동적 컴포넌트 (Dynamic Component)

컴포넌트를 동적으로 변경하고 싶을 때 v-bind:is 속성을 사용해서 변경할 수 있습니다. 동적 컴포넌트는 탭 인터페이스와 같이 컴포넌트간에 동적으로 전환해야 할 때 유용합니다.

<component :is="currentTabComponent"></component>

위 예시에서 :is 속성에 전달된 값은 다음 중 하나를 포함할 수 있습니다.

  • 등록된 컴포넌트의 문자열 이름 string
  • 실제 가져온 컴포넌트 객체 object
<component :is=”...” />를 사용하여 여러 컴포넌트간 전환하면 컴포넌트의 마운트가 매번 해제됩니다. 이때 <KeepAlive> 내장 컴포넌트를 사용하여 “비활성 컴포넌트"들의 “활성” 상태를 유지할 수 있도록 강제할 수 있습니다.

다음은 vue3에서 script setup을 사용한 동적 컴포넌트 사용 예제입니다.

<script setup>
import { shallowRef } from 'vue';
// 각각의 컴포넌트를 불러와야 하며
import TabMenu1 from './TabMenu1.vue';
import TabMenu2 from './TabMenu1.vue';
import TabMenu3 from './TabMenu1.vue';

const menus = [
  { name: 'TabMenu1', comp: TabMenu1 },
  { name: 'TabMenu2', comp: TabMenu2 },
  { name: 'TabMenu3', comp: TabMenu3 }
]

/* 일반 ref를 사용하면 warning이 발생합니다.
  shallowRef를 사용해서 컴포넌트 정의를 반응형 객체로 전환하지 못하도록 중지합니다. */
const activeTab = shallowRef(menus[0])

function changeActiveTab(i) {
  activeTab.value = menus[i]
}
</script>

<template>
  <button
    v-for="(menu, index) in menus"
    :key="index"
    @click="changeActiveTab(index)">
    {{ menu.name }}
  </button>
  <component :is="activeTab.comp" /> // 컴포넌트 '이름'이 아닌 '컴포넌트'로 불러오기
</template>
저작자표시 비영리 변경금지 (새창열림)

'FrontEnd > Vue' 카테고리의 다른 글

[Vue3] Composable API  (0) 2023.04.17
[Vue3] Vue Router  (0) 2023.04.17
[Vue3] watch, watchEffect  (0) 2023.04.17
[Vue3] 양방향 바인딩  (0) 2023.04.17
[Vue3] 이벤트 처리  (0) 2023.04.17
    'FrontEnd/Vue' 카테고리의 다른 글
    • [Vue3] Composable API
    • [Vue3] Vue Router
    • [Vue3] watch, watchEffect
    • [Vue3] 양방향 바인딩
    Grace
    Grace
    기술 및 회고 블로그

    티스토리툴바