Vue3 での watchEffect の使用に関する簡単な分析

Vue3 での watchEffect の使用に関する簡単な分析

序文

誰もが vue2 の watch API に精通している必要があります。vue2 の vue インスタンスには $watch メソッドがあり、sfc (署名ファイル コンポーネント) には watch オプションがあります。プロパティが変更されたときに目的の動作を実行するために使用できます。例えば:

  • ID が変更されたら、データベースから新しいデータを取得します。
  • プロパティが変更されたときにアニメーションを実行します。
  • 検索条件が変更された場合は、クエリされたデータを更新します。

しかし、watch API に加えて、vue3 では watchEffect API も追加されました。その使用方法を見てみましょう。

userID の依存関係を収集し、userID が変更されると、watchEffect コールバックが実行されます。

// [ドキュメント](https://v3.vuejs.org/api/computed-watch-api.html#watcheffect) を参考にした例

'vue' から {watchEffect, ref} をインポートします。
設定 () {
    定数ユーザーID = ref(0)
    watchEffect(() => console.log(ユーザーID))
    タイムアウトを設定する(() => {
      ユーザーID.値 = 1
    }, 1000)

    /*
      * ログ
      * 0 
      * 1
    */

    戻る {
      ユーザーID
    }
 }

時計とどう違うのですか?

  • まず、サンプル コードから、watchEffect では監視するプロパティを指定する必要がないことがわかります。依存関係は自動的に収集されます。コールバックでレスポンシブ プロパティを参照している限り、これらのプロパティが変更されるとコールバックが実行されますが、watch では指定されたプロパティのみを監視して変更を加えることができます (v3 以降では、複数のプロパティを同時に指定できます)。
  • 2 番目のポイントは、watch は新しい値と古い値 (更新前の値) を取得できますが、watchEffect は取得できないことです。
  • 3 つ目のポイントは、watchEffect が存在する場合、コンポーネントが初期化されて依存関係を収集するときに 1 回実行され (computed と同様)、その後、収集された依存関係が変更され、コールバックが再度実行されますが、watch は最初に依存関係を指定するため、コールバックは必要ありません。

それらの違いから、それぞれの長所と短所がわかります。ビジネスニーズに基づいて適切な選択を行うことができます。

watchEffect 上級

監視を停止

watchEffect は次のようにリスナーを停止する関数を返します。

const stop = watchEffect(() => {
  /* ... */
})

// 後で
停止()

例は、上にリンクされている公式ドキュメントから引用したものです。

watchEffect がセットアップまたはライフサイクルに登録されている場合、コンポーネントがアンマウントされると自動的に停止します。

副作用を無効にする

副作用とは何ですか?予測できないインターフェース リクエストは副作用です。ユーザー ID を使用してユーザーの詳細を照会し、ユーザー ID を監視するとします。ユーザー ID が変更されると、リクエストが開始されます。これは非常に簡単で、ウォッチで実行できます。 ただし、データ要求プロセス中にユーザー ID が複数回変更された場合、複数の要求が行われ、最後に返されたデータによって、以前に返されたすべてのユーザー詳細が上書きされます。これはリソースの浪費につながるだけでなく、ウォッチコールバックが実行される順序を保証することもできません。そして、watchEffect を使用するとそれが実現できます。

無効化()

onInvalidate(fn)に渡されたコールバックは、watchEffectが再実行されるか、watchEffectが停止されたときに実行されます。

ウォッチエフェクト(() => {
      // 非同期 API 呼び出し。操作オブジェクトを返します。const apiCall = someAsyncMethod(props.userID)

      onInvalidate(() => {
        // 非同期 API 呼び出しをキャンセルします。
        apiCall.キャンセル()
      })
})

onInvalidate の助けを借りて、上記の状況に対してよりエレガントな最適化を行うことができます。

要約する

Vue3 での watchEffect の使い方についてはこれで終了です。Vue3 watchEffect の使い方についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue3 watch と watchEffect の使い方と違い
  • VUE3 での watch と watchEffect の使い方の詳細な説明
  • vue3 の watch と watchEffect についてご存知ですか?
  • Vue3 における watchEffect の具体的な使用法についての簡単な説明
  • vue3 の watch と watchEffect の詳細な例

<<:  Linux での screen コマンドの使用方法の詳細な説明

>>:  MySQLインデックスに関する重要な面接の質問をいくつか共有します

推薦する

CSS の両端揃えを実現する div+css レイアウトの 4 つの方法の概要

2 端揃えを実現する div+css レイアウトは、Web ページの組版でよく使用されます。この記事...

電子署名を実装するWeChatミニプログラム

この記事では、WeChatミニプログラムで電子署名を実装するための具体的なコードを参考までに紹介しま...

LinuxはRsync+Inotifyを使用してローカルとリモートのデータのリアルタイム同期を実現します。

0x0 テスト環境本社本番サーバーと支社バックアップサーバーはリモートデータバックアップが必要です...

Nginx を使用して https ルートドメイン名への 301 リダイレクトを実装するためのサンプル コード

SEO とセキュリティを考慮して、301 リダイレクトが必要です。以下の一般的な処理には Nginx...

WindowsにOpenSSLをインストールし、OpenSSLを使用して公開鍵と秘密鍵を生成します。

1. OpenSSL公式サイト公式ダウンロードアドレス: https://www.openssl....

IE8はマルチ互換モードを使用してWebページを正常に表示します

IE8には複数の互換モードがあります。 IE プラットフォームの設計者である Chris Wilso...

MySQL 作成ルーチン権限に関する注意事項

1. ユーザーにルーチン作成権限がある場合は、プロシージャ | 関数を作成できます。 2. ユーザー...

win10 64 ビット システムに複数の JDK バージョンをインストールする際の切り替え問題と解決策の概要

コンピューターにmyeclipse2017とidea2017がインストールされているため、ideaが...

MySQL インデックスがソートに与える影響の分析例

この記事では、例を使用して、MySQL インデックスがソートに与える影響を説明します。ご参考までに、...

Windows オペレーティング システムでポートの使用状況を照会およびクリアするプログラム

Windowsオペレーティングシステムでは、ポートの占有状況を照会し、ポートの占有状況をクリアするプ...

2つのボールが交差する粘着効果を実現するCSSサンプルコード

これは純粋に CSS のみを使用して作成されたエフェクトです。簡単に言うと、このエフェクトは画像処理...

Docker 入門インストールチュートリアル (初心者版)

ドクター紹介: Docker はコンテナ関連の技術です。簡単に言うと、さまざまなソフトウェアを実行で...

角度に基づくツリー型セカンダリテーブルを実現する

まず効果を見てみましょう: コード: 1.html <div class="user...

VUE無限レベルツリーデータ構造表示の実装

目次コンポーネントの再帰呼び出しレンダリングメソッドの使用プロジェクトに取り組んでいると、左側のメニ...

Docker での RocketMQ の詳細なインストールと使用

RocketMQ イメージを検索するには、Docker の hub.docker.com で検索する...