質問内容
Vue.js3の勉強をしていて、サンプルコードでわからないことがあったので質問させてください。
propsで用意した配列の要素を、テンプレートにはめ込んで、
コンポーネントとして使用するサンプルなのですが、
htmlで、作成したコンポーネントを複数使用する場合、
<div>で括らないと、1つ目のコンポーネントしか表示されなくなります。 <div>で括ると、複数のコンポーネントが読み込まれ、表示できるのですが、 なぜこのような差が出るのかがわからないです。propsに入れるときに、コンポーネントで指定した引数が配列に入っていると考えると、
htmlにコンポーネントを記載する度に上書きされて、
- app.component() が実行されるタイミング?
- <div>で括ることで、別のタグとして判断できるようになる?
- コンポーネントは連続で使用できない?
等のルールがあるのか、と思い調べてみたのですが、わかりませんでした。
なぜ<div>で括らないとコンポーネントを複数使用できないのか、
ご存知の方がいたらご教授願いたいです。
よろしくお願いいたします。
該当のソースコード
<index.html>
html
1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8"/> 5 <title>My first Vue app</title> 6 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" > 7 <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> 8 <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script> 9 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script> 10 <script src="https://unpkg.com/vue@next"></script> 11 </head> 12 13 <body> 14 <h1 class="bg-secondary text-white display-4 px-3">Vue3</h1> 15 16 <div id="app" class="container"> 17 <p>{{ message }}</p> 18 <div> 19 <hello name="Taro" /> 20 </div> 21 <div> 22 <hello name="Hanako" /> 23 </div> 24 </div> 25 26 <script> 27 const appData = { 28 data() { 29 return { 30 message: '※コンポーネントを表示する。' 31 } 32 } 33 } 34 35 let app = Vue.createApp(appData) 36 37 app.component('hello', { 38 props: ['name'], 39 data() { 40 return { 41 message: 'これは新しいメッセージです。' 42 } 43 }, 44 template: '<p class="alert alert-primary"> Hello, {{ name }}! </p>' 45 }) 46 47 app.mount('#app') 48 </script> 49 </body> 50</html>
発生している問題
html
1<div id="app" class="container"> 2 <p>{{ message }}</p> 3 <hello name="Taro" /> 4 <hello name="Hanako" /> 5</div>
このようにコードを直した場合、Taroしか表示されません。
なぜ<div>で括らないと複数使用できないのかが、わからないです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/07 12:54
2021/03/07 13:16 編集