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 のクイックインストールのチュートリアル分析

推薦する

ウェブページの幅を携帯電話の画面(ビューポート)の幅に自動的に適応させる実装コード

一般的な書き方は次のとおりです。 XML/HTML コードコンテンツをクリップボードにコピー<...

Zookeeper 不正アクセス テストの問題

目次序文Zookeeper サービスのオープンを検出情報を入手する接続テスト接続先修理計画参照する序...

nginx高可用性クラスタの実装プロセス

この記事は主に、nginx 高可用性クラスタの実装プロセスを紹介します。この記事のサンプルコードは非...

HTMLでは、全体的なスタイルとレイアウトを崩さずに、部分的に強制スクロールバーを使用できます。

まずはエフェクト画像を投稿します:全体的なスタイルとレイアウトが崩れないように、スクロール バーがロ...

CentOS7.6 システムで yum を使用して lnmp 環境を構成する方法

1. インストールバージョンの詳細 サーバー: MariaDB サーバーバージョン: 5.5.60-...

Node.jsミドルウェアの仕組みの詳細な説明

目次Express ミドルウェアとは何ですか? Expressミドルウェアを作成するための要件Exp...

組み込み Linux 開発環境で ping と nfs を構築するためのソリューション

1. 組み込みソフトウェアレベル 1) ブートローダ -> ブートローダ組み込みシステム全体の...

CentOS 7 で PHP 5.4 を 5.6 にアップグレードする方法の簡単な分析

1.ターミナルに入ったらPHPのバージョンを確認するphp -v出力は次のようになります。 PHP ...

DockerでRedisを使用するための詳細な手順

1. はじめにこの記事では、Docker を使用して Redis を探索する方法を説明します。 Do...

Windows システムに VirtualBox と Ubuntu 16.04 をインストールするための詳細なチュートリアル

1. ソフトウェアの紹介バーチャルボックスVirtualBox は、無料のオープンソース仮想マシン ...

el-table ヘッダーでテキストを折り返す 3 つの方法の詳細な説明

目次問題の説明レンダリング3種類のコード要約する問題の説明通常、表のヘッダーは折り返されませんが、ビ...

Windows に MySQL 5.7.18 の解凍バージョンをインストールするチュートリアル

1. インストールプロセスMySQL バージョン: 5.7.18 1. my.ini ファイル(簡易...

HTMLノードの追加と削除の簡単な例

HTML ノードの追加と削除の簡単な例 HTML ノードの追加と削除の簡単な例<input t...

画像の一時停止を実現するjQueryプラグイン

この記事では、画像の一時停止を実現するためのjQueryプラグインの具体的なコードを参考までに共有し...