あっくんブログ Written by Akihiro Tsuji

Vue3のコンポーネントの基本をマスターしよう

Vue.js プログラミング

こんにちはあっくんです。最近、車の運転の練習をしています。週一くらいで、兄の車で兄に教えていただいています。怖いけど、楽しいです。バックでの駐車は全くわからないです。41歳で、就活中、実家、未婚などもろもろポンコツですが、ここから積み上げてみます。今日はVueのコンポーネントの基本をやっていきましょう。

コンポーネントってなに?

コンポーネントは再利用可能な「部品」

コンポーネントは「名前のついた再利用可能なオブジェクト」です。コンポーネントは、一度定義すると、後はHTMLのタグを書くのと同じ感覚で利用できます。

コンポーネントの定義と利用

アプリケーション・オブジェクトの「componet」をつかいます。

アプリケーション.component(名前, {設定上情報})

第1引数がコンポーネントの名前で、第2引数にオブジェクトとしてまとめて用意します。

コンポーネントはHTMLタグ?

<コンポーネント />

コンポーネントのタグがあるかのように記述すればいいです。

helloコンポーネントを作ってみる

「Hello!」とメッセージを表示するだけのコンポーネント「hello」を作っていきましょう。

<!DOCTYPE html> <html> <head> <title>My first Vue app</title> <!-- CSS only --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous" /> <!-- JavaScript Bundle with Popper --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous" ></script> <script src="https://unpkg.com/vue@next"></script> </head> <body> <h1 class="bg-secondary text-white display-4 px-3">Vue3</h1> <div id="app" class="container"> <p>{{message}}</p> <hello /> </div> <script> const appdata = { data() { return { message: "*コンポーネントを表示する", }; }, }; let app = Vue.createApp(appdata); app.component("hello", { template: '<p class="alert alert-primary">Hello!</p>', }); app.mount("#app"); </script> </body> </html>
Code language: HTML, XML (xml)

Image from Gyazo

↑「Hello」とアラートが表示されます。これがhelloコンポーネントです。

コンポーネントの組み込み方

<h1 class="bg-secondary text-white display-4 px-3">Vue3</h1> <div id="app" class="container"> <p>{{message}}</p> <hello /> </div>
Code language: HTML, XML (xml)

<hello/>がhelloコンポーネントを使っているところです。

app.component("hello", { template: '<p class="alert alert-primary">Hello!</p>', })
Code language: CSS (css)

componentメソッドを呼び出して、コンポーネントを作成しています。第1引数の名前にhelloを、第2引数の設定情報オブジェクトには、「template」という項目用意しています。このtemplateに設定した内容がコンポーネントとして表示されます。ここでは、

と置き換わって表示されます。

・変数をコンポーネントに渡す

data(){ return { 変数 } }

変数などの値はコンポーネントの「data」メソッドに用意します。

メッセージを指定する

<!DOCTYPE html> <html> <head> <title>My first Vue app</title> <!-- CSS only --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous" /> <!-- JavaScript Bundle with Popper --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous" ></script> <script src="https://unpkg.com/vue@next"></script> </head> <body> <h1 class="bg-secondary text-white display-4 px-3">Vue3</h1> <div id="app" class="container"> <p>{{message}}</p> <hello /> </div> <script> const appdata = { data() { return { message: "*コンポーネントを表示する", }; }, }; let app = Vue.createApp(appdata); app.component("hello", { data() { return { message: "これは新しいメッセージです。", }; }, template: '<p class="alert alert-primary">{{message}}</p>', }); app.mount("#app"); </script> </body> </html>
Code language: HTML, XML (xml)
Image from Gyazo

↑Webブラウザで表示すると、messageで設定したメッセージが表示されます。

属性の利用

コンポーネントの表示するメッセージなどの情報を属性として用意できます。「props」というプロパティとして用意しておきます。

props: [ 名前1, 名前2, ………]

propsは、配列を値にもつプロパティです。配列には、タグに用意される属性の名前をまとめておきます。

<!DOCTYPE html> <html> <head> <title>My first Vue app</title> <!-- CSS only --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous" /> <!-- JavaScript Bundle with Popper --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous" ></script> <script src="https://unpkg.com/vue@next"></script> </head> <body> <h1 class="bg-secondary text-white display-4 px-3">Vue3</h1> <div id="app" class="container"> <p>{{message}}</p> <div><hello name="Taro" /></div> <div><hello name="Hanako" /></div> </div> <script> const appdata = { data() { return { message: "*コンポーネントを表示する", }; }, }; let app = Vue.createApp(appdata); app.component("hello", { props: ["name"], data() { return { message: "これは新しいメッセージです。", }; }, template: ' <p class="alert alert-primary">Hello, {{name}}!</p>', }); app.mount("#app"); </script> </body> </html>
Code language: HTML, XML (xml)
Image from Gyazo

↑2つのタグを用意しました。それぞれname属性の名前が表示されます。

タグに書かれる属性、propsプロパティ、templateに記述される{{}}記号といった組み合わせで、コンポーネントの属性は動いています。

タイプの指定が必要なとき

props: { 名前: タイプ, 名前: タイプ, ・・・・・}

値のタイプは「String」,「Number」,「Boolean」,「Array」,「Object」というものが用意されています。

ここまで読んでいただいてありがとうございます。掌田津耶乃さんのVue.js3超入門で勉強をしています。語りかけるような文章ですごいわかりやすいです。