🟡
【Vue.js】ユーザーアクション編[methods/v-on:(@)/emit()]
methods()
methodsの実装例と解説
実装例(あいさつボタンを押した際に下にこんにちはと表示させる)
<template>
<button @click="sayHello">挨拶</button>
<!-- 下にメッセージを表示 -->
<p v-if="message" style="margin-top: 10px; color: green;">{{ message }}</p>
</template>
<script setup>
import { ref } from 'vue'
// メッセージを保持する変数
const message = ref('')
// メッセージを表示させるmethods
function sayHello() {
message.value = 'こんにちは!'
}
</script>
v-on:(@)
methodsの実装例と解説
実装例(ボタンを押した際に在庫量を減らす)
<template>
<p>在庫: {{ stock }}</p>
<button @click="stock--">購入</button>
// ↑ ボタンがクリックされたら、在庫を1つ減らす(stock = stock - 1 の短縮記法)。
// ↑ 本当はstockの処理を<script>内に記述してもよいが、処理が簡単であるため<template>内に記載
</template>
<script setup>
import { ref } from 'vue'
const stock = ref(5)
// ↑ {{ stock }} の部分をリアクティブに監視している
</script>
emit()
emit()の実装例と解説
src/components/UserActionChild.vueを作成し、子コンポーネントとする
<template>
<button @click="sendEvent">親に通知する</button>
// ↑ ボタンを配置し、クリックメソッドを定義
</template>
<script setup>
const emit = defineEmits(['customEvent'])
// ↑ emit 関数を使えるようにするのが defineEmits()。このコンポーネントは customEvent というイベントを親に送るという記述。
function sendEvent() {
emit('customEvent', '子コンポーネントからのメッセージです!')
}
// ↑customEvent というイベントを、'子コンポーネントからのメッセージです!' というデータ付きで親に送る。
</script>
src/views/UserActionView.vue
<template>
<div>
<h1>emit()</h1>
<UserActionChild @customEvent="handleCustomEvent" />
// ↑ UserActionChild コンポーネント内で customEvent が emit されたら、親で handleCustomEvent 関数を実行してねという意味。
<p>子から受け取ったメッセージ: {{ messageFromChild }}</p>
</div>
</template>
<script setup>
import { ref } from 'vue'
import UserActionChild from '../components/UserActionChild.vue'
// ↑ 子コンポーネントを読み込むための記述
const messageFromChild = ref('')
// ↑ messageFromChildを監視
function handleCustomEvent(message) {
messageFromChild.value = message
}
// メッセージをmessageFromChildに代入
</script>
ここまで聞くと、小さな部品(子)を作成して、それぞれから親にemitを使って通知することで分離が可能となり保守性があがることがわかる。以下に部品を提供しているライブラリをまとめている。
UIコンポーネントライブラリ
コンポーネントライブラリ5選
1. Vuetify
提供:フォーム、テーブル、ダイアログ、ナビゲーションなど一式。
2. Element Plus
特徴:中国の企業Elemeが開発、エンタープライズ系に強い。控えめで整ったUI。
3. Naive UI
特徴:Vue 3 + TypeScript フル対応。テーマカスタマイズが柔軟。
4. Quasar
特徴:SPA、SSR、PWA、モバイルアプリまで一括開発可能。
5. PrimeVue
特徴:非常に豊富な部品群(100種類以上!)。業務アプリや管理画面に向いている。日本語の情報も比較的豊富。
Discussion