Propsとカスタムイベント
propsでデータを子へ渡し、イベントをemitして親へ伝えます
「Propsとカスタムイベント」はCoddyKit上の無料Vue Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVue Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vue Academyコースには全3レッスンが含まれています。
親子間の通信
コンポーネントは2方向に通信します。
- Propsは親から子へデータを渡します
- Eventsは子から親へメッセージを送ります
この一方向のデータフローにより、アプリを予測しやすく保てます。
Propsの宣言
子コンポーネントは、受け取るpropsを宣言します。script setupではdefinePropsを使用します。
<script setup>
const props = defineProps(['title', 'count'])
</script>
<template>
<h2>{{ title }}</h2>
<p>{{ count }}</p>
</template>型付きProps
propsをオブジェクトとして宣言すると、検証用の型を指定できます。
<script setup>
defineProps({
title: String,
count: Number,
isActive: Boolean
})
</script>デフォルト値と必須Props
propsをrequiredとして指定したり、default値を設定したりできます。
<script setup>
defineProps({
title: {
type: String,
required: true
},
count: {
type: Number,
default: 0
}
})
</script>親からPropsを渡す
親コンポーネントは属性としてデータを渡します。動的な値をバインドするには:を使用します。
<template>
<ProductCard
title="Coffee Mug"
:count="stock"
:is-active="available"
/>
</template>
<!-- static string vs bound expression -->Propの命名規則
JSではpropsをcamelCaseで宣言し、テンプレートではkebab-caseで渡します。
- JSのprop: isActive
- テンプレートの属性: :is-active
Vueが2つの形式を自動的に変換します。
Propsは読み取り専用
子コンポーネントはpropsを直接変更してはいけません。
- Propsは一方向に、下へ流れます
- Propsを変更すると予測しにくくなり、警告が発生します
- 共有データを変更するには、イベントを発行して親コンポーネントに更新させます
発行するイベントの宣言
子コンポーネントは、defineEmitsを使って発行するイベントを宣言します。
<script setup>
const emit = defineEmits(['increment', 'delete'])
</script>イベントの発行
emit関数を呼び出すと、必要に応じてペイロードを添えてイベントを上へ送信できます。
<script setup>
const emit = defineEmits(['add'])
function handleClick() {
emit("add", { id: 1, name: "Item" })
}
</script>
<template>
<button @click="handleClick">Add</button>
</template>Options APIでのイベント発行
Options APIでは、代わりにthis.$emitを呼び出します。
export default {
emits: ["save"],
methods: {
onSave() {
this.$emit("save", this.formData)
}
}
}親でイベントをリッスンする
親コンポーネントは@event-nameでリッスンし、ペイロードを受け取ります。
<template>
<TodoItem
:task="task"
@delete="removeTask"
@add="onAdd"
/>
</template>
<script setup>
function onAdd(item) {
console.log("Added:", item.name)
}
</script>理解度チェック
propsとイベントについての理解度を確認しましょう。
まとめ: Propsとイベント
コンポーネント間の通信について学びました。
- definePropsで型とデフォルト値を持つpropsを宣言します
- Propsは下へ流れ、読み取り専用です
- defineEmitsでイベントを宣言します
- emit("name", payload)でイベントを上へ送信します
- 親コンポーネントは@eventでリッスンします
次は、スロットとスコープ付きスロットについて学びます。
よくある質問
「Propsとカスタムイベント」レッスンは無料ですか?
はい。「Propsとカスタムイベント」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vue Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vue Academyコースには全3レッスンが含まれています。
「Propsとカスタムイベント」で何を学びますか?
propsでデータを子へ渡し、イベントをemitして親へ伝えます ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Vue Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのVue Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「Propsとカスタムイベント」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このVue Academyレッスンでコードを書いて実行できますか?
はい。すべてのVue Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- コンポーネントの作成と登録
- Propsとカスタムイベント
- スロットとスコープ付きスロット