0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者から見たVue3コンポーネントの実装のしやすさについて Vision.2

Last updated at Posted at 2024-06-12

Vue3コンポーネントの実装のしやすさについて Vision.2

Vue3のコンポーネントの実装について、前回はVue3コンポーネントの概略から、
単一ファイルコンポーネントと子コンポーネントについて、
シンプルな実装を体験しました。

前回:親コンポーネントと子コンポーネントについて

今回は、propsの受け渡しとイベントの購読を以下にまとめます。

Vue3のコンポーネントの基礎2

公式ページ:コンポーネントの基礎を読み進めながら、以下のように解釈。

  1. propsの受け渡し(Passing Props): コンポーネントに登録できるカスタム属性。
    definePropsマクロをscript setup内で使用することで、
    あるコンポーネントから、別のコンポーネントに任意のパラメータを
    渡すことができます。

    「コンポーネントの基礎」ページ内では、コンポーネントの初期化時に
    必要なパラメータを渡すことができる機能と見られますが、propsの完全ガイド
    という別ページが存在していますので、本記事でも別途、追いたいと思います。

  2. イベントの購読(Listening to Events): コンポーネントに登録できるカスタムイベント。
    propsがコンポーネントのパラメータとして定義できたことと同様
    コンポーネントのイベント(振る舞い)も定義することができます。

    「コンポーネントの基礎」ページ内では、親コンポーネントで定義したイベントを
    子コンポーネントから実行できるような例を記載しています。
    defineEmitsマクロをscript setup内で使用することで親コンポーネントの
    任意のイベントを、子コンポーネント側で実行させられます。
    こちらもカスタムイベントの完全ガイドという別ページが存在していますので
    別途、追いたいと思います。

なんかこう、直感的な言い方じゃないというか、プロパティ定義イベント定義という
記載の方がすっと読める気がして、「コンポーネントの基礎」ページの記載では、
認知負荷を感じますね。

実装してみた

defineProps および defineEmits

子コンポーネント

definePropsで定義したmsgをh4フォントで表示されるように実装しています。
親コンポーネントからmsgに対応する文字列が渡される想定です。

また、defineEmitsについて、親コンポーネントで定義したenlarge-textイベントを設定
ボタンのクリックイベントでenlarge-textイベントが実行されるようにしています。
スクリーンショット (443).png

親コンポーネント

公式サンプルを見てみると、refというオブジェクトが必要と伺えますが、
この時点では、詳細が分かりません。別途、追いたいと思います。
ひとまず、今回の目的であるイベントの実行ができるかを優先して確認します。
スクリーンショット (440).png

動作実験

設置した「Enlarge text」ボタンを連打すると
スクリーンショット (437).png

確かに親コンポーネントで定義したイベントが実行され、表示文字列のフォントが
大きくなったことを確認できました。
スクリーンショット (438).png

まだ簡単に実装できる範囲ですね。
気になった点はdefinePropsの書き方が現時点で2種類ある点です。

child.vue
<script setup>
defineProps(['title'])
</script>

もう一方

child-another.vue
<script setup>
defineProps<{
  title: string
}>()
</script>

現時点では、後者の書き方では型指定が行えて、numberでもbooleanでも
対応できました。前者はstring特化に見えます。

追記

definePropsの書き方は3種類あるとコメント頂きました。propsの完全ガイドを含む今後の体験で深掘りできるようなので、一通り学んだあと、本記事の修正も含めて対応したいと思います。

次回:スロットを使ったコンテンツ配信と動的コンポーネントについて

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?