開発をスピードアップできる VueUse ライブラリ 5 つ (まとめ)

開発をスピードアップできる VueUse ライブラリ 5 つ (まとめ)

VueUse は、Anthony Fu によるオープンソース プロジェクトであり、Vue 開発者に Vue 2 および Vue 3 用の多数の基本的な Composition API ユーティリティ関数を提供します。

ref の変更の追跡、要素の可視性の検出、一般的な Vue パターンの簡素化、キーボード/マウス入力など、一般的な開発者のユースケースに対応する多数のソリューションを提供します。これは、標準機能をすべて自分で追加する必要がないため、開発時間を大幅に節約できる優れた方法です。

私は VueUse ライブラリが好きです。それは、提供するユーティリティを決定する際に開発者を第一に考えており、現在のバージョンの Vue と同期しているため、よく管理されたライブラリだからです。

VueUse にはどのようなユーティリティがありますか?

各ユーティリティの完全なリストを確認したい場合は、公式ドキュメントを確認することを強くお勧めします。まとめると、VueUse には 9 つの関数があります。

  • アニメーション - 使いやすいトランジション、タイムアウト、タイミング機能が含まれています
  • ブラウザ - さまざまな画面コントロール、クリップボード、設定などに使用できます。
  • コンポーネント — さまざまなコンポーネントメソッドのショートカットを提供します
  • フォーマッタ – 反応時間のフォーマット機能を提供します
  • センサー — さまざまなDOMイベント、入力イベント、ネットワークイベントを監視するために使用されます
  • 状態 - ユーザー状態(グローバル、ローカル ストレージ、セッション ストレージ)を管理します。
  • ユーティリティ — ゲッター、条件文、参照同期などのさまざまなユーティリティ関数。
  • ウォッチ — 一時停止可能なオブザーバー、デバウンス オブザーバー、条件付きオブザーバーなどのより高度なオブザーバー タイプ
  • その他 — イベント、WebSocket、およびさまざまな種類の Web Worker 機能

これらのカテゴリのほとんどは複数の異なる機能をカバーしているため、VueUse はユースケースに柔軟に対応し、Vue アプリケーションの構築をすぐに開始するのに最適な場所となります。

この記事では、5 つの異なる VueUse 関数を見て、このライブラリの操作がいかに簡単かを説明します。

しかし、まずはそれを Vue プロジェクトに追加しましょう。

VueUseをVueプロジェクトにインストールする

VueUse の最も優れた機能の 1 つは、1 つのパッケージで Vue 2 と Vue 3 の両方と互換性があることです。

VueUseをインストールするには、npmまたはCDNの2つのオプションがあります。

npm i @vueuse/core # yarn を @vueuse/core に追加します
<script src="https://unpkg.com/@vueuse/shared"></script>
<script src="https://unpkg.com/@vueuse/core"></script>

わかりやすいのでNPMを使用することをお勧めしますが、CDNを使用する場合は、window.VueUse経由でアプリケーション内のVueUseにアクセスできます。

NPM インストールの場合、次のように標準のオブジェクト分解を使用して @vueuse/core 経由でインポートすることで、すべての関数にアクセスできます。

// VueUse からのインポート例 import { useRefHistory } from '@vueuse/core'

わかりましたVueUse がインストールされたので、アプリケーションで使用してみましょう。

1. レスポンシブデータの変更を追跡するためにuseRefHistoryを使用する

useRefHistory は、ref に加えられたすべての変更を追跡し、それを配列に保存します。これにより、アプリケーションに元に戻す機能とやり直し機能を簡単に提供できるようになります。

元に戻すことができるテキスト領域を作成する例を見てみましょう。

最初のステップは、VueUse を使用せずに、ref、テキストエリア、元に戻すボタンとやり直しボタンを使用して基本コンポーネントを作成することです。

<テンプレート>
  <p> 
    <button> 元に戻す </button>
    <button> やり直す </button>
  </p>
  <テキストエリア v-model="テキスト"/>
</テンプレート>

<スクリプトの設定>
'vue' から { ref } をインポートします
定数テキスト = ref('')
</スクリプト>

<スタイルスコープ>
  ボタン {
    境界線: なし;
    アウトライン: なし;
    右マージン: 10px;
    背景色: #2ecc71;
    色: 白;
    パディング: 5px 10px;;
  }
</スタイル>

次に、useRefHistory 関数をインポートし、テキスト参照から history、undo、および redo プロパティを抽出して、VueUse を追加します。これは、useRefHistory を呼び出して ref を渡すだけです。

'vue' から { ref } をインポートします
'@vueuse/core' から { useRefHistory } をインポートします。

定数テキスト = ref('')
const { 履歴、元に戻す、やり直し } = useRefHistory(テキスト)

ref が変更されるたびに、オブザーバーがトリガーされ、作成した履歴プロパティが更新されます。

次に、実際に何が起こっているかを確認できるように、テンプレートに履歴を出力し、対応するボタンがクリックされたときに関数の呼び出しを元に戻したりやり直したりしてみましょう。

<テンプレート>
  <p> 
    <button @click="undo"> 元に戻す </button>
    <button @click="redo"> やり直す </button>
  </p>
  <テキストエリア v-model="テキスト"/>
  <ul>
    <li v-for="履歴内のエントリ" :key="entry.timestamp">
      {{エントリ}}
    </li>
  </ul>
</テンプレート>

<スクリプトの設定>
'vue' から { ref } をインポートします
'@vueuse/core' から { useRefHistory } をインポートします。
定数テキスト = ref('')
const { 履歴、元に戻す、やり直し } = useRefHistory(テキスト)
</スクリプト>

<スタイルスコープ>
  ボタン {
    境界線: なし;
    アウトライン: なし;
    右マージン: 10px;
    背景色: #2ecc71;
    色: 白;
    パディング: 5px 10px;;
  }
</スタイル>

さて、実行してみましょう。入力するたびに、各文字が履歴配列に新しいエントリをトリガーし、「元に戻す/やり直し」をクリックすると、対応するエントリに移動します。

この機能にさらに機能を追加するためのさまざまなオプションもあります。たとえば、反応オブジェクトを深くトレースし、そのような履歴エントリの数を制限することができます。

const { 履歴、元に戻す、やり直し } = useRefHistory(text、{
  深い:本当、
  定員: 10,
})

オプションの完全なリストについては、必ずドキュメントを確認してください。

2. onClickOutsideはモーダルを閉じる

onClickOutside は、要素の外側で行われたクリックを検出します。私の経験では、この機能の最も一般的な使用例は、モーダルまたはポップアップを閉じることです。

多くの場合、ユーザーの注意を集中させ、エラーを制限するために、モーダルで Web ページの残りの部分をブロックする必要があります。ただし、モーダルの外側をクリックした場合は、モーダルを閉じる必要があります。

これはたった 2 つのステップで実行できます。

  • 検出したい要素のテンプレート参照を作成する
  • onClickOutsideはこのテンプレート参照で実行されます

これは、onClickOutside を使用したポップアップ付きのシンプルなコンポーネントです。

<テンプレート>
  <button @click="open = true"> ポップアップを開く </button>
  <div class="popup" v-if='open'>
    <div class="popup-content" ref="popup">
      私は非常に堕落した人間です、そして非常に堕落しています! 私は非常に堕落しています、そして非常に堕落しています!
    </div>
  </div>
</テンプレート>
 
 
<スクリプトの設定>
'vue' から { ref } をインポートします
'@vueuse/core' から { onClickOutside } をインポートします。
const open = ref(false) // ポップアップの状態
const popup = ref() // テンプレート参照
// ポップアップが存在する場合、ポップアップ以外のものをクリックするたびに
onClickOutside(ポップアップ、() => {
  open.value = false
})
</スクリプト>
 
 
<スタイルスコープ>
  ボタン {
    境界線: なし;
    アウトライン: なし;
    右マージン: 10px;
    背景色: #2ecc71;
    色: 白;
    パディング: 5px 10px;;
  }
  。ポップアップ {
    位置: 固定;
    上: ;
    左: ;
    幅:100vw;
    高さ:100vh;
    ディスプレイ: フレックス;
    アイテムの位置を中央揃えにします。
    コンテンツの中央揃え: 中央;
    背景: rgba(, , , 0.1);
  }
  .ポップアップコンテンツ{
    最小幅: 300px;
    パディング: 20px;
    幅: 30%;
    背景: #fff;
  }
</スタイル>

その結果、ボタンを使用してポップアップを開き、ポップアップ コンテンツ ウィンドウの外側をクリックして閉じることができるようになります。

3. useVModelはv-modelバインディングを簡素化する

Vue 開発者の一般的な使用例は、コンポーネントのカスタム v-model バインディングを作成することです。つまり、コンポーネントは値をプロパティとして受け入れ、その値が変更されるたびに、コンポーネントは親に更新イベントを発行します。

カスタム v-model の構築に関する完全なチュートリアルについては、このトピックに関する完全なガイドをご覧ください。

useVModel 関数は、これを標準の ref 構文を使用するだけに簡略化します。テキスト入力の値に対して v-model を作成しようとするカスタム テキスト入力があるとします。通常、値のプロパティを受け入れ、変更イベントを発行して親コンポーネントのデータ値を更新する必要があります。

ref を使用して props.value を呼び出す代わりに、これを通常の ref のように使用して扱うことができます。これにより、覚えておく必要のあるさまざまな構文の数を減らすことができます。更新:valueuseVModel

<テンプレート>
    <div>
        <入力 
            タイプ="テキスト" 
            :value="データ"
            @input="更新"
        />
    </div>
</テンプレート>
 
 
<スクリプト>
'@vueuse/core' から {useVModel} をインポートします。
エクスポートデフォルト{
  プロパティ: ['データ'],
  セットアップ(props, { 出力 }) {
    const data = useVModel(props, 'data', 出力)
    console.log(data.value) // props.data と等しい
    data.value = 'name' // 等しい: emitting('update:data', 'name')
    const update = (イベント) => {
        データ値 = イベントターゲット値
    }
    戻る {
        データ、
        アップデート
    }
  },
}
</スクリプト>

値にアクセスする必要があるときはいつでも、.valueuseVModel を呼び出すだけで、コンポーネントのプロパティから値が取得されます。オブジェクトの値を変更するたびに、useVModel は親コンポーネントに更新イベントを発行します。

親コンポーネントがどのようなものかを示す簡単な例を次に示します。

<テンプレート>
  <div>
    <p> {{データ}} </p>
    <カスタム入力 
      :data="データ" 
      @update:data="データ = $イベント"
    />
  </div>
</テンプレート>
 
 
<スクリプト>
'./components/CustomInput.vue' から CustomInput をインポートします。
'vue' から { ref } をインポートします
エクスポートデフォルト{
  コンポーネント:
    カスタム入力、
  },
  設定 () {
    定数データ = ref('hello')
    戻る {
      データ
    }
  }
}

結果は次のようになります。親の値は常に子の入力と同期しています。

4. InterpObserverを使用して要素の可視性を追跡する

Interp オブザーバーは、2 つの要素が重なり合っているかどうかを判断する場合に非常に強力です。この良い使用例は、要素が現在ビューポートに表示されているかどうかを確認することです。

基本的には、ターゲット要素の何パーセントがルート要素/ドキュメントと交差するかをチェックします。パーセンテージが特定のしきい値を超えると、コールバックを呼び出して、ターゲット要素が表示されているかどうかを判断します。

useInterpObserver は、InterpObserver API を使用するための簡単な構文を提供します。必要なのは、検査する要素のテンプレート参照を提供することだけです。

デフォルトでは、InterpObserver はドキュメントのビューポートをルートとして使用し、しきい値は 0.1 になります。そのため、どちらかの方向でそのしきい値を超えると、交差オブザーバーがトリガーされます。

この例のコードは次のようになります。ターゲット要素のビューポートでのみスペースを占めるダミーの段落があります。

<テンプレート>
  <p> ターゲットは表示されていますか? {{ targetIsVisible }} </p>
  <div class="コンテナ">
    <div class="target" ref="target">
      <h1>こんにちは世界</h1>
    </div>
  </div>
</テンプレート>
 
 
<スクリプト>
'vue' から { ref } をインポートします
'@vueuse/core' から { useInterpObserver } をインポートします。
エクスポートデフォルト{
  設定() {
    定数ターゲット = ref(null)
    定数 targetIsVisible = ref(false)
    const {stop} = useInterpObserver(
      ターゲット、
      ([{ isIntersecting }], オブザーバー要素) => {
        targetIsVisible.value = 交差している
      },
    )
    戻る {
      ターゲット、
      ターゲットが可視、
    }
  },
}
</スクリプト>
 
 
<スタイルスコープ>
。容器 {
  幅: 80%;
  マージン: 自動;
  背景色: #fafafa;
  最大高さ: 300px;
  オーバーフロー: スクロール;
}
.ターゲット{
  上マージン: 500px;
  背景色: #1abc9c;
  色: 白;
  パディング: 20px;
}
</スタイル>

実行してスクロールすると、正しく更新されていることがわかります。

Interp Observer のルート要素、マージン (交差点の計算に使用されるルート境界ボックスのオフセット)、しきい値レベルの変更など、その他のオプションを指定することもできます。

//useInterpObserver オプション const { stop } = useInterpObserver(
      ターゲット、
([{ isIntersecting }], オブザーバー要素) => {
        targetIsVisible.value = 交差している
      },
      {
// ルート、ルートマージン、しきい値、ウィンドウ
// ソース内の完全なオプション: https://github.com/vueuse/vueuse/blob/main/packages/core/useInterpObserver/index.ts
        閾値: 0.5、
      }
)

また、このメソッドは、交差点の監視を停止するために呼び出すことができる停止関数を返すことも重要です。これは、要素が画面に初めて表示されたときのみを追跡したい場合に特に便利です。

このコード スニペットでは、targetIsVisible が true に設定されると、オブザーバーは停止し、ターゲット要素からスクロールしても値は true のままになります。

//InterpObserverを停止する
const {stop} = useInterpObserver(
      ターゲット、
      ([{ isIntersecting }], オブザーバー要素) => {
        targetIsVisible.value = 交差している
        if (交差している) {
          停止()
        }
      },
    )

5. 値間の遷移を緩めるためにuseTransitionを使用する

useTransition は、VueUse ライブラリ全体の中で私のお気に入りの関数の 1 つです。これにより、連続した値の間をスムーズに移動できるようになります。

ref として保存されたデジタル ソースと、異なる値間の遷移となる出力があります。たとえば、Vue 3 チートシートのサインアップ ページにあるようなカウンターを作成したいとします。

これは次の 3 つのステップで実行できます。

  • countrefを作成し、ゼロに初期化します
  • 出力参照useTransitionを作成します(期間と遷移タイプを設定します)
  • カウントの値を変更する
// 変換コードを使用する <スクリプト設定>
'vue' から { ref } をインポートします
'@vueuse/core' から { useTransition, TransitionPresets } をインポートします。
 
 
定数ソース = ref(0)
 
 
const出力 = useTransition(ソース、{
  期間: 3000、
  トランジション: TransitionPresets.easeOutExpo、
})
 
 
ソース値 = 5000
</スクリプト>

次に、テンプレートでは、異なる値間をスムーズに遷移するため、出力の値を表示する必要があります。

<テンプレート>
  <h2> 
    <p> 参加する </p>
    <p> {{ Math.round(出力) }}+ </p>
    <p>開発者</p>
  </h2>
</テンプレート>
 
 
<スクリプトの設定>
'vue' から { ref } をインポートします
'@vueuse/core' から { useTransition, TransitionPresets } をインポートします。
定数ソース = ref()
const出力 = useTransition(ソース、{
  期間: 3000、
  トランジション: TransitionPresets.easeOutExpo、
})
ソース値 = 5000
</スクリプト>

結果はこちらです!

Transition を使用して、数値の配列全体を変換することもできます。これは、位置や色を操作するときに便利です。色を操作するための重要なコツは、計算プロパティを使用して RGB 値を正しい色の構文にフォーマットすることです。

<テンプレート>
<h2 :style="{ color: color } "> 色の変更 </h2>
</テンプレート>
<スクリプトの設定>
'vue' から { ref, computed } をインポートします
'@vueuse/core' から { useTransition, TransitionPresets } をインポートします。
const ソース = ref([, , ])
const出力 = useTransition(ソース、{
期間: 3000、
トランジション: TransitionPresets.easeOutExpo、
})
定数色 = 計算された(() => {
const [r, g, b] = 出力値
`rgb(${r}, ${g}, ${b})` を返します
})
ソース値 = [255, , 255]
</スクリプト> 

さらに、組み込みのトランジション プリセットを使用するか、CSS イージング関数を使用して定義するかのいずれかで、これをさらにカスタマイズできるクールな方法もいくつかあります。すべてはあなた次第です。

最後に

これは決して VueUse の完全なガイドではありません。これらは、私が最も興味深いと思った VueUse の多くの機能のうちのほんの一部です。

これらのユーティリティ関数の優れている点は、それぞれが特定の一般的なユースケースを解決するように設計されているため、開発プロジェクトのスピードアップと開発効率の向上に役立つことです。

開発をスピードアップできる 5 つの VueUse 関数ライブラリについての記事はこれで終わりです。VueUse 関数ライブラリに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue の新しいおもちゃ VueUse の具体的な使い方

<<:  Remレイアウトを使用して適応性を実現する

>>:  MySQLファイルストレージの詳細な説明

推薦する

TypeScriptの基本型の詳細な説明

目次ブール型数値型文字列型文字列と数値を連結する未定義およびnull配列型タプル型列挙型あらゆるタイ...

WindowsにMySQL5.7圧縮パッケージを素早くインストールする

この記事では、Windows に MySQL 5.7 圧縮パッケージをインストールする方法について説...

Nodejs モジュール システムのソースコード分析

目次概要CommonJS 仕様Node の CommonJS 仕様の実装モジュールのエクスポートとイ...

Momentsで写真を整理するためのCSSコード

まず、Moments を開いて、写真の数が異なるいくつかのレイアウトを確認するか、以下の例を参照して...

Swiper+echartsは複数のダッシュボードの左右スクロール効果を実現します

この記事では、ダッシュボードの左右スクロール効果を実現するためのスワイパー+echartsの具体的な...

Vuex はシンプルなショッピングカート機能を実装します

この記事の例では、ショッピングカート機能を実装するためのvuexの具体的なコードを参考までに共有して...

JSフロントエンドモジュール化のいくつかの仕様についての簡単な説明

目次序文フロントエンドモジュール開発の価値厄介な名前の競合面倒なファイル依存関係モジュール化の利点C...

Windows Server 2008R2、2012、2016、2019 の違い

目次共通バージョンの紹介共通バージョンのダウンロードアドレスとインストール以下に簡単な違いを示します...

【HTML要素】画像の埋め込み方法

img 要素を使用すると、HTML ドキュメントに画像を埋め込むことができます。画像を埋め込むには、...

ホームページのデザインはウェブデザイナーのレベルを最もよく反映する

私がこれまで携わってきた多くのプロジェクトでは、基本的に避けられない悪循環がありました。それは、ホー...

Ubuntu 19でdockerソースをインストールできない問題を共有する

主要な Web サイトと個人的な習慣に従って、Docker ソースを追加するには次の方法を使用します...

HTML での非同期ファイルアップロードの例

コードをコピーコードは次のとおりです。 <form action="/hehe&qu...

Navicat がデータベース データ構造をインポートする際に発生するエラー datetime(0) の SQL レポートの問題を解決します。

エラー発生: MySQL 5.7 から SQL にデータベースをエクスポートし、それを MySQL ...

XHTMLはHTMLのいくつかの廃止された要素を使用しなくなりました

CSS ウェブページレイアウトを行う場合、XHTML1.0 仕様に準拠する必要があることは誰もが知っ...

JavaScript ジグソーパズルゲーム

この記事の例では、ジグソーパズルゲームを実装するためのJavaScriptの具体的なコードを参考まで...