Vue.jsでのカスタムディレクティブの作成とユースケース

Vue.jsでのカスタムディレクティブの作成とユースケース

Vue.jsではカスタムディレクティブを使用して、DOM操作や共通の動作を再利用可能にできます。本記事では、カスタムディレクティブの作成方法から実用的なユースケースまでを詳しく解説します。

カスタムディレクティブとは

Vue.jsに標準で備わっていない独自のディレクティブを定義し、DOM操作をカスタマイズできます。

カスタムディレクティブの基本構文

基本的なカスタムディレクティブの構文を示します。

app.directive('focus', {
  mounted(el) {
    el.focus();
  }
});

カスタムディレクティブの登録

ディレクティブをVueアプリに登録します。

import { createApp } from 'vue';
import App from './App.vue';

const app = createApp(App);

app.directive('focus', {
  mounted(el) {
    el.focus();
  }
});

app.mount('#app');

ディレクティブの引数を使う

引数を受け取って動作を変えるカスタムディレクティブ。

app.directive('color', {
  mounted(el, binding) {
    el.style.color = binding.value;
  }
});

修飾子の使用

ディレクティブに修飾子を追加して動作を拡張します。

app.directive('resize', {
  mounted(el, binding) {
    if (binding.modifiers.debounce) {
      let timer;
      window.addEventListener('resize', () => {
        clearTimeout(timer);
        timer = setTimeout(() => binding.value(), 300);
      });
    }
  }
});

ライフサイクルフック

カスタムディレクティブには、さまざまなライフサイクルフックがあります。

app.directive('example', {
  beforeMount(el) {
    console.log('beforeMount');
  },
  mounted(el) {
    console.log('mounted');
  },
  updated(el) {
    console.log('updated');
  },
  unmounted(el) {
    console.log('unmounted');
  }
});

実用例1: 自動フォーカスディレクティブ

特定の要素に自動的にフォーカスを当てるディレクティブ。

app.directive('auto-focus', {
  mounted(el) {
    el.focus();
  }
});

実用例2: クリック外イベント

要素外のクリックを検出するカスタムディレクティブ。

app.directive('click-outside', {
  mounted(el, binding) {
    el.clickOutsideEvent = (event) => {
      if (!(el === event.target || el.contains(event.target))) {
        binding.value(event);
      }
    };
    document.addEventListener('click', el.clickOutsideEvent);
  },
  unmounted(el) {
    document.removeEventListener('click', el.clickOutsideEvent);
  }
});

実用例3: ツールチップディレクティブ

シンプルなツールチップを表示するカスタムディレクティブ。

app.directive('tooltip', {
  mounted(el, binding) {
    el.setAttribute('title', binding.value);
  }
});

グローバル vs ローカルディレクティブ

グローバルディレクティブとローカルディレクティブの違いと使い分け。

ディレクティブのテスト

ディレクティブの動作をテストする方法。

カスタムディレクティブの注意点

パフォーマンスやバグ回避のための注意点。

まとめ

カスタムディレクティブは、Vue.jsアプリケーションでDOM操作やUIの振る舞いを効率的に管理する強力なツールです。実用的な例を通じて活用し、コードの再利用性と保守性を向上させましょう。