ミニマムなVue.jsコンポーネントプログラミングその3(サブコンポーネント)
今回は「ミニマムなサブコンポーネント」です。
フォルダ構成は現在こんな感じ。
[src/views]
Home.vue <==ホーム画面
[src/router]
index.js <==ルータ
[src]
App.vue <==アプリケーション
main.js <==Vueインスタンスの生成(宣言レンダリングといわれるやつ)
ルータを埋め込んだ抽象的なアプリケーションコンポーネントがあり、
ルータにはHOME画面のみ登録されています。
今回はホーム画面にサブコンポーネントを埋め込みます。
サブコンポーネント定義(src/components/VTuber.vue)
VTuberの名前、年齢、身長をリスト表示するだけのサブコンポーネントです。
<template>
<div>
<ul>
<li>名前:{{vname}}</li>
<li>年齢:{{age}}</li>
<li>身長:{{height}}</li>
</ul>
</div>
</template>
<script>
export default {
name: 'Vtuber',
props: {
vname: String,
age: Number,
height: Number
}
}
</script>
コンポーネント内に埋め込むので便宜的にサブコンポーネントと呼んでいますが、基本的に同じコンポーネントです。
components/なんたら.vue => 他のコンポーネントに埋め込んで使うもの。サブコンポーネント。
views/かんたら.vue => 画面そのものを指すコンポーネント
こんな感じです。画面コンポーネントはサブコンポーネントを埋め込むので、それ自体は空っぽになりがちかも。
コンポーネントには(クラスのような)プロパティを持たせることができて、
コンポーネントインスタンスを通じてアクセスできます。
このケースでは名前、年齢、身長をプロパティとして用意しました。
最新のECMAScript標準仕様により、プリミティブ型でちゃんと型定義されています。(対応していないブラウザ向けにはBabelがよしなに変換してくれる)
String(文字列)、Number(数値、小数点含む)です。
他言語のように、整数(int)、小数点(float)とわかれてないんですね。
サブコンポーネント埋め込み
作ったVTuberサブコンポーネントをHOME画面(Homeコンポーネント)へ埋め込みます。
<template>
<div>
<h1>VTuberプロフィール</h1>
<VTuber vname="町田ちま" age="16" height="150"/> <==ココ
</div>
</template>
<script>
import VTuber from '../components/VTuber.vue'
export default {
name: 'Home',
components: {
VTuber
}
}
</script>
このHOME画面は以下のように構成されます。
見出し:VTuberプロフィール(h1)
詳細情報:VTuber詳細情報(VTuberサブコンポーネント)
VTuberの詳細情報を渡すと、リスト形式で表示してくれる部品を、サブコンポーネントとして切り出しているわけです。
基本的にコンポーネントとは、それ自身で自律しているべきであり、必要なデータを渡せば勝手に動いてくれるものなので、コンポーネント間の通信はなければないほどよいです。特に子から親への通信は極力ない方がよいですが、サブコンポーネントでデータ取得エラーが起きて、親画面のヘッダに「Warning」と出したい場合等、必要なケースは出てくるかも。(このケースでも、サブコンポーネントをエラー表示デザインすればよいかもですが)
まぁ、必要になったら考えようと思います。
表示画面
npm run serveして確認。
次回
次は「ミニマムなデータ取得」をしてみようと思います。
Author And Source
この問題について(ミニマムなVue.jsコンポーネントプログラミングその3(サブコンポーネント)), 我々は、より多くの情報をここで見つけました https://qiita.com/helloworld2/items/d0219822e4c57d9af9f3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .