作成日: 2023/04/02
0

Vueでよく使うデザインパターン

Vue.jsはフロントエンド開発において、とても人気が高く使われるフレームワークのひとつです。Vue.jsを使うことで、コンポーネントベースアーキテクチャの実装が比較的容易になります。Vue.jsを使う上でよく使うデザインパターンについて説明します。

1. 単一ファイルコンポーネント

Vue.jsでは、HTML、JavaScript、CSSを1つのファイルにまとめることができます。これが単一ファイルコンポーネント(Single File Components)であり、ファイル拡張子は「.vue」です。Vue.jsのコンポーネントは、すべて単一ファイルコンポーネントで作成することが推奨されています。

例えば、以下のような単一ファイルコンポーネントを作成することができます。

<template>
  <div>
    <h1>こんにちは!</h1>
  </div>
</template>

<script>
  export default {
    name: 'HelloWorld',
    data () {
      return {
        message: 'Vue.jsにようこそ!'
      }
    }
  }
</script>

<style>
  h1 {
    color: red;
    font-size: 24px;
  }
</style>

2. Vuex

VuexはVue.jsアプリケーションのための状態管理ライブラリです。Vuexを使うことで、アプリケーション全体で共通の状態を管理することができます。Vuexの状態管理は、単方向データフローを使っています。

Vuexは以下の4つの要素から構成されます。

  • state:アプリケーションの状態を保持する場所
  • getter:stateを元に算出された値を返す関数
  • mutation:stateを変更するための関数
  • action:mutationを呼び出す関数

例えば、以下のようにVuex storeを作成することができます。

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    count: 0
  },
  getters: {
    doubleCount: state => state.count * 2
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  actions: {
    incrementAsync ({ commit }) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    }
  }
})

export default store

3. コンポーネントのprops

Vue.jsのコンポーネントは、propsを使って他のコンポーネントから値を受け取ることができます。propsはコンポーネントのプロパティのことで、親コンポーネントから子コンポーネントに渡すことができます。

// 親コンポーネント
<template>
  <div>
    <child-component :message="hello"></child-component>
  </div>
</template>

<script>
  import ChildComponent from './ChildComponent.vue'
  export default {
    name: 'ParentComponent',
    components: {
      'child-component': ChildComponent
    },
    data () {
      return {
        hello: 'こんにちは!'
      }
    }
  }
</script>

// 子コンポーネント
<template>
  <div>{{ message }}</div>
</template>

<script>
  export default {
    name: 'ChildComponent',
    props: {
      message: String
    }
  }
</script>

4. コンポーネント描画の条件分岐と繰り返し

Vue.jsのコンポーネントは、v-if、v-showを使って描画条件分岐をすることができます。また、v-forを使ってオブジェクトや配列をループすることができます。

<template>
  <div>
    <div v-if="showMessage">
      こんにちは!
    </div>
    <div v-show="showMessage">
      こんにちは!
    </div>
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item }}
      </li>
    </ul>
  </div>
</template>

<script>
  export default {
    name: 'List',
    data () {
      return {
        showMessage: true,
        items: ['りんご', 'ばなな', 'いちご']
      }
    }
  }
</script>

5. カスタムディレクティブ

Vue.jsでは、カスタムディレクティブを作成することができます。カスタムディレクティブを作成することで、HTMLタグに対して独自の動作を追加できます。

// カスタムディレクティブ定義
Vue.directive('my-directive', {
  bind: function (el, binding) {
    el.style.backgroundColor = binding.value.color
  }
})

// カスタムディレクティブ使用
<template>
  <div v-my-directive="{ color: 'red' }">
    カスタムディレクティブ
  </div>
</template>

以上が、Vue.jsでよく使うデザインパターンの紹介でした。Vue.jsを使う上で、単一ファイルコンポーネントやVuex、props、条件分岐と繰り返し、カスタムディレクティブなどの知識は必須です。これらの概念を理解していれば、より高度なVue.jsの開発も行うことができます。

参考リンク


フルスタックエンジニア。徒然なるままに記事を投稿していきます。日々学習。