Vue3のコンポーネントの基本をマスターしよう
こんにちはあっくんです。最近、車の運転の練習をしています。週一くらいで、兄の車で兄に教えていただいています。怖いけど、楽しいです。バックでの駐車は全くわからないです。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)
↑「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)
↑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)
↑2つのタグを用意しました。それぞれname属性の名前が表示されます。
タグに書かれる属性、propsプロパティ、templateに記述される{{}}記号といった組み合わせで、コンポーネントの属性は動いています。
タイプの指定が必要なとき
props: { 名前: タイプ, 名前: タイプ, ・・・・・}
値のタイプは「String」,「Number」,「Boolean」,「Array」,「Object」というものが用意されています。
ここまで読んでいただいてありがとうございます。掌田津耶乃さんのVue.js3超入門で勉強をしています。語りかけるような文章ですごいわかりやすいです。