コンポーネントオブジェクト(VueConstructor
)にprops
を置くと、親に対して「このコンポーネントは A という値が必要だから渡してね」のように伝えることができます。
一番簡単にてっとり早くそれを実装するには単にprops
に渡せるprops
名を配列で羅列するだけです。
{
props: [
'foo',
'barBaz'
]
}
これでfoo
とbarBaz
というプロパティを受け付けるようになりました。親からは、
<Child foo="a" bar-baz="b" />
のように値を渡すことができます。ご覧の通りbarBaz
のように設定したプロパティ名はテンプレート上ではfoo-baz
のようなケバブケースで使えます。
もし「foo
は数値がいい」「bar-baz
は関数がいい」という注文がある場合、props
をこのように書き換えます。
{
props: {
foo: Number,
barBaz: Function
}
}
使えるコンストラクタには他に、
String,
Boolean,
Array
Object,
Promise
class で定義したもの何でも
が使えます。つまりコンストラクタなら何でもです。
これで先程のままa
やb
という値を渡してしまった場合、「Invalid prop: type check failed for prop "<prop名>"
」というエラーが出ます。
しかしこれでもまだ不十分なケースがあります。それは値を絶対に渡してほしい場合です。つまり先程までのは、どちらかまたはどちらも渡さなくても通ってしまいます。
<Child :foo="1" />
必須プロパティ
「bar-baz
こそ必要なのに」という場合これでは困ってしまいます。Vue はあるプロパティについては必須にするというやり方も提供しています。それには先程のprops
をまた書き換える必要があります。
{
props: {
foo: Number,
barBaz: {
type: Function,
required: true
}
}
}
barBaz
だけが必須なので、それだけ書き換えてます。barBaz
をオブジェクトに変えコンストラクタをtype
に、そしてrequired: true
を増やします。
これでbar-baz
を渡さなかった時は「Missing required prop: "barBaz"
」というエラーがでるようになりました。
デフォルト値
このprop
オブジェクトはdefault
というキーを持つことができます。これはprop
値が渡されなかった時代わりにそのプロパティ値に設定される値になります。
例のようなものを作りました。分かりづらい人はフォークして実際に触ってみてください。