Vue3 コンポジション API でロジックの再利用を実装する方法

Vue3 コンポジション API でロジックの再利用を実装する方法

Composition API はロジック再利用手順を実装します。

  1. ロジックコードを関数に抽出します。関数コマンドの規則はuseXXX形式です(これはReact Hooksと同じです)。
  2. セットアップで関数 useXXX を参照する

たとえば、現在のマウスの位置を取得するメソッドを定義します。

1 つ目は、ref で定義された useMousePosition を直接使用することです。

このようにして、輸出と輸入の両方を自由に構造化することができる。

// マウスの位置を使用する
'vue' から { ref, onMounted, onUnmounted } をインポートします。

// 1. 関数を定義し、ロジックを抽出し、useXXX という名前を付けます
関数useMousePosition() {
  // ref を使用して定義します const x = ref(0)
  定数y = ref(0)

  関数 update(e) {
    console.log(x.値、y.値);

    x.値 = e.ページX
    y.値 = e.pageY
  }

  マウント時(() => {
    console.log('マウス移動イベントのリッスンを開始します');
    window.addEventListener('mousemove', 更新)
  })

  マウント解除時(() => {
    console.log('マウススクロールイベントの監視を削除します');
    window.removeEventListener('mousemove', 更新)
  })
  戻る {
    ×、 
    ええ
  }
}

 
// この関数をエクスポートする export default useMousePosition
<!-- このメソッドはどのコンポーネントでも呼び出すことができます -->

<テンプレート>
  <p>マウスの位置: {{x}}, {{y}}</p>
</テンプレート>

<スクリプト>
'./useMousePosition' から useMousePosition をインポートします。
エクスポートデフォルト{
  名前: 'MousePosition', 
  設定() {
    // useMousePosition は ref を使用して変数を定義し、分解することができます。const { x, y } = useMousePosition()
    コンソールログ(x, y)
    戻る {
      x, y
    }
  }
}
</スクリプト>

2 番目の方法は、reactive を使用してマウス座標オブジェクトを定義することです。

このエクスポート メソッドは、コンポーネントにインポートするときに構造化解除できません。

'vue' から { onMounted、onUnmounted、reactive } をインポートします。

エクスポート関数useMousePosition2() {
  // reactive を使用して定義します const mouse = reactive({
    x: 0, 
    年: 0
  })

  関数 update(e) {
    マウス.x = e.pageX
    マウス.y = e.pageY
  }

  マウント時(() => {
    console.log('マウス移動イベントのリッスンを開始します');
    window.addEventListener('mousemove', 更新)
  })

  マウント解除時(() => {
    console.log('マウススクロールイベントの監視を削除します');
    window.removeEventListener('mousemove', 更新)
  })

  戻る {
    ねずみ
  }
}
<テンプレート>
  <!-- オブジェクト メソッドを使用して情報を表示します -->
  <p>マウスの位置2: {{mouse.x}}, {{mouse.y}}</p>
</テンプレート>
<スクリプト>
'./useMousePosition' から { useMousePosition2 } をインポートします。
エクスポートデフォルト{
  名前: 'MousePosition', 
  設定() {
    // useMousePosition2 はリアクティブを使用して定義されているため、分解は不可能です const { mouse } = useMousePosition2()
    戻る {
      ねずみ
    }
  }
}
</スクリプト>

3番目の方法はtoRefsを使うことです

このメソッドを使用すると、リアクティブ オブジェクトを ref オブジェクトに分解できます。

エクスポート関数useMousePosition3() {
  // reactive を使用して定義します const mouse = reactive({
    x: 0, 
    年: 0
  })

  関数 update(e) {
    マウス.x = e.pageX
    マウス.y = e.pageY
  }

  マウント時(() => {
    console.log('マウス移動イベントのリッスンを開始します');
    window.addEventListener('mousemove', 更新)
  })

  マウント解除時(() => {
    console.log('マウススクロールイベントの監視を削除します');
    window.removeEventListener('mousemove', 更新)
  })
  
  // ここで、toRefs を使用して ref オブジェクトに分解します。return toRefs(mouse)
}
<テンプレート>
  <p>マウスの位置: {{x}}, {{y}}</p>
</テンプレート>

<スクリプト>
'./useMousePosition' から {useMousePosition3 } をインポートします。
エクスポートデフォルト{
  名前: 'MousePosition', 
  設定() {
    // リアクティブを使用してマウス座標オブジェクトを定義し、toRefs を介してそれを参照オブジェクトに分解します。const { x, y } = useMousePosition()
    コンソールログ(x, y)
    戻る {
      x, y
    }
  }
}
</スクリプト>

3 つの方法はすべて実装できますが、通常使用する場合は ref オブジェクトを返すため、1 番目と 3 番目の方法を使用し、2 番目の方法は使用しないようにすることをお勧めします。

Vue3 コンポジション API でロジック再利用を実現する方法についての記事はこれで終わりです。Vue3 コンポジション API ロジック再利用の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vite2+Vue3を使用してMarkdownドキュメントをレンダリングする練習
  • Vue3ナビゲーションバーコンポーネントのカプセル化実装方法
  • Vue3 Vue イベント処理ガイド
  • Vue3 シングルファイルコンポーネントのスタイル機能の詳細な説明
  • vue3.0+echarts は 3 次元の縦棒グラフを実現します
  • この記事では、Vue 3.0 レスポンシブの使い方を説明します。
  • vue3.2 で追加された defineCustomElement の基本原理の詳細な説明
  • Vue3 + TypeScript 開発の概要
  • Vue3+TypeScriptは再帰メニューコンポーネントの完全な例を実装します
  • Vue3はToDoリストを実装する
  • Vue3+スクリプト設定+ts+Vite+Volarプロジェクト
  • Vue3は画像拡大鏡効果を実現します
  • vue3.0+vant3.0の迅速なプロジェクト構築の実装
  • Vue3 ドキュメント クイックスタート

<<:  Win10にmysql8.0.15 winx64をインストールしてサーバーに接続する際に問題が発生しました

>>:  Centos7 ベースの mysql5.7 のクイックインストールのチュートリアル分析

推薦する

MySQL のロックに関する問題

ロックの分類:データ操作の粒度から:テーブルロック:操作時にテーブル全体がロックされます。行ロック:...

show processlist コマンドによる MySQL パフォーマンス検査の説明

show processlist コマンドは非常に便利です。MySQL の実行が 50% 以上になる...

いくつかの面接の質問を使ってJavaScriptの実行メカニズムを調べる

目次前の単語同期と非同期前菜プレートを追加マクロタスク マイクロタスク約束しましょうタイマーを追加す...

要素に丸い境界線を追加する border-radius メソッド

border-radius:10px; /* すべての角は半径 10px で丸められます*/ bor...

HTML チュートリアル: 定義リスト

<br />原文: http://andymao.com/andy/post/104.h...

Docker Compose で利用可能な環境変数の詳細な説明

Compose のいくつかの部分は、何らかの方法で環境変数を扱います。このチュートリアルは、必要な情...

HTML <!--...--> コメントタグの役割の詳細な分析

多くのウェブサイトのソースコードを確認すると、多くのコメントが見つかります。特に、ソース文書にコメン...

JavaScript によるデータ視覚化: ECharts マップの作成

目次概要予防1. 使用方法2. 実装手順予備実装コード効果: Geo共通設定上記の構成を追加した後の...

Linux lessコマンド例の詳細な説明

ファイル名が少ないファイルを表示ファイル名を少なく | grep -n コンテンツを検索内容に応じて...

vue3 のさまざまなファイルタイプのプレビュー機能の例

目次序文1. オフィス文書の種類のプレビュー2. PDF形式のプレビュー3. 画像の種類4. ビデオ...

MySQLコマンドプロンプトで入力エラーが発生したときに前のコマンドを修正する方法

目次現在の問題解決プロセス具体的な手順解決した事件現在の問題MySQL コマンド プロンプトに複数行...

知っておくべき 7 つのネイティブ JS エラーの種類

目次概要1. 範囲エラー2. 参照エラー3. 構文エラー4. タイプエラー5. URIエラー6. 評...

MySQL データベースを最適化する 8 つの方法の詳細な説明 (必読の定番)

導入:インターネット上にはデータベースの最適化に関する情報や方法が数多くありますが、その多くは品質に...

MySQL の結合テーブルにインデックスを作成する方法

この記事では、MySQL で 2 つのテーブルを関連付ける結合テーブルにインデックスを作成する方法を...

MySQLクエリキャッシュに関するヒント

目次序文QueryCache の概要クエリキャッシュ構成QueryCache の使用queryCac...