開発をスピードアップできる 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ファイルストレージの詳細な説明

推薦する

スクロールバーを非表示にしながらもスクロール効果を維持する純粋な CSS (モバイルと PC)

携帯モバイル ページは Chrome および Safari とのみ互換性があればよいため、カスタム ...

JavaScript 改ざん防止オブジェクトの使用例

目次JavaScript 改ざん防止オブジェクト1. 拡張不可能なオブジェクト2. 封印された物体3...

HTMLページ作成に関する私の経験の簡単な要約

Word of Mouth に入社して 3 ~ 4 か月が経ちました。仕事の中で一番の収穫は、ビジュ...

ウェブサイトのBGM実装方法

個々のウェブマスターにとって、自分のウェブサイトをいかにユニークで個性あふれるものにするかは、常に絶...

CSS を使用して ul と li の水平配置を実現する 2 つの方法

li はブロックレベル要素であり、デフォルトで 1 行を占めるため、水平方向の配置を実現する場合は、...

MySQL をデプロイするときに発生する「テーブル mysql.plugin が存在しません」という問題の解決方法

今日、MySQL の無料インストール版をデプロイしたところ、テーブル 'mysql.plug...

uni-app で scss を使用するサンプル コード

遭遇した落とし穴私は午後中ずっと、uni-app で scss を使用する際の落とし穴を解決すること...

HTML コードの書き方に関する提案のまとめ

リソースファイルのプロトコルを省略する画像、メディアファイル、スタイル、スクリプトの URL では、...

Windows 10 64 ビット版に MySQL 5.6.35 をインストールするためのグラフィック チュートリアル

1. MySQL Community Server 5.6.35をダウンロードするダウンロードアドレ...

異なるページ間のJavaScriptデータ転送(URLパラメータ取得)

Web ページでは、あるページに情報を入力すると、別のページにジャンプし、入力した情報が別のページ...

完璧なアロエベラジェルを選ぶには?完璧なアロエベラジェルの本物と偽物の見分け方

最新のパーフェクト アロエ ベラ ジェルのパッケージ ボックスには、赤いフォントで完璧な英語の文字が...

docker cp ファイルをコピーしてコンテナに入る

実行中のコンテナに入る # コンテナに入り、新しいターミナルを開きます# docker exec -...

CentOS の起動時に RabbitMq ソフトウェアを自動的に起動する方法

1. /etc/init.dディレクトリに新しいrabbitmqを作成します。 [root@loca...

MySQLでJSONフィールドを操作する方法

MySQL 5.7.8 では json フィールドが導入されました。このタイプのフィールドは使用頻度...

ドラッグアンドドロップでVueユーザーインターフェースを生成する方法

目次序文1. 技術原理1.1 レイアウト1.2 コンポーネント1.3 ステータス1.4 イベント1....