Vue Prop の値を v-bind で親コンポーネントを継承して子コンポーネントで表示する
まずは Vuetify 起動時の data からの表示を見てみる
App 側でのとってくるコンポーネントの指定と描画
Vuetify の App コンポーネントで HelloWorld コンポーネントを
import して使うコードを見てみる。
まず script のタグのところから見ていくと
import HelloWorld from './components/HelloWorld';
これで
とってくるコンポーネントの場所を指定してインポートして
export default { name: 'App', components: { HelloWorld, }, };
と、エクスポート するときに自分のコンポーネント名と、使用する子供コンポーネント名を指定している。
<template> <v-app> <v-app-bar> </v-app-bar> <v-main> <HelloWorld/> </v-main> </v-app> </template>
そして App の template 内部で <HelloWorld/>
として呼び出して、その結果描画されている。
次はとって来ている子供コンポーネントの HelloWorld のファイルを見てみる
とって来ている HelloWorld コンポーネント
<template> <v-container> {{message}} </v-container> </template> <script> export default { name: 'HelloWorld', data: () => ({ message: 'message from HelloWorld Data', }), } </script>
template の v-container で このコンポーネントで使う変数の呼び出しをして
script で 自分のコンポーネント名の指定と、使う data の指定をしている
data とコンポーネントの解釈のまとめ
prop と違ってコンポーネントに渡すことはなく、コンポーネントに結びついているので、コンポーネントを呼び出せば、それについて来て自動的に使われる
コンポーネントの付属品?として解釈した。
prop の中身を出してみる
prop の概念 DTO
一方 prop は DTO, data transfer object という概念のようだ。
データを別のコンポーネントに渡すための一時的な場所?として解釈する
prop の取り扱いを見てみる
子供コンポーネントは親コンポーネントにもらった prop を表示する処理で
親コンポーネントで prop を定義している
親コンポーネントでの prop の定義と子供への受け渡しを書く
script で
<script> import HelloWorld from './components/HelloWorld'; import Render from './components/Render'; export default { name: 'App', components: { HelloWorld, Render, }, data: () => { return { message : 'This is App data message' } } }; </script>
Render する 子供を import して
component として使うと指定して
親の data に 子供に渡す message を定義する
<template> <v-main> <HelloWorld/> <Render :message='message'/> </v-main> </template>
そして template で描画するときに 呼び出す 子供である Render に値を渡す
この :message
は v-bind:message
の省略形である。
子供の Render で受け取って描画する処理をかく
<template> <v-container> {{message}} </v-container> </template> <script> export default { name: 'Render', props: ['message'] } </script>
最初は App の return の message のスペルを間違えていたため動かなかったが、
正しいスペルで呼び出したら表示できた。
まとめ
親コンポーネントで
子供のファイルの位置を import して
components として明示して
data で変数と中身を定義して
template 内部で v-bind で変数を渡して
子供コンポーネントで
props として変数を配列の形で受け取って
template 内部で {{}} で 変数名を表示する