Vue 3.2 から提供されている setup script を使って動的にコンポーネントを読み込みたいのですが、文字列指定ではいけず、オブジェクト自体を渡す必要があるようです。この場合、Ajax などで Web API から JSON データを受け取り、それを元に動的にコンポーネントを表示させる時に、面倒です。何かいい方法はありますか?
vue
1<script setup lang="ts"> 2import ItemA from './ItemA.vue'; 3 4// Web API から受け取った JSON 的なもの 5const items = [ 6 { 7 id: 1, 8 type: ItemA // OK 9 }, 10 { 11 id: 2, 12 type: 'ItemA' // NG 13 } 14]; 15</script> 16 17<template> 18 <component 19 :is="item.type" 20 v-for="item in items" 21 :key="item.id" 22 /> 23</template>
v-if
などで分岐する方法も検討しましたが、コンポーネントの種類が増えると template が煩雑になることを懸念しています。
従来の Options API 表記ですと Component 利用を明示するため文字列でも問題なく表示できます。
vue
1<script lang="ts"> 2import ItemA from './ItemA.vue'; 3 4export default { 5 components: { 6 'ItemA': ItemA 7 }, 8 data() { 9 return { 10 items: [ 11 { 12 id: 1, 13 type: 'ItemA' // OK 14 }, 15 { 16 id: 2, 17 type: 'ItemA' 18 } 19 ] 20 } 21 } 22} 23</script> 24 25<template> 26 <div> 27 <component 28 :is="item.type" 29 v-for="item in items" 30 :key="item.id" 31 /> 32 </div> 33</template>
あなたの回答
tips
プレビュー