vue WatchとComputedの使用の概要

vue WatchとComputedの使用の概要

01. リスナーウォッチ

(1)機能

  • ウォッチ: データ内のデータ変更を監視するために使用され、監視対象の属性値が変更された場合にのみ実行されます。
エクスポートデフォルト{
    データ() {
        戻る {
            番号: 1
        }
    },
    時計:{
        // 通常の監視方法。ここではデータ内の数値属性を監視することを意味します // 最初のパラメータは変更後の新しい値を示し、2 番目のパラメータは変更前の古い値を示します number(newVal,oldVal){
            コンソールにログ出力します。
            コンソールにログ出力します。
        }
    }
}

(2)特性と方法

  • 即時: コンポーネントの作成後、プロパティが直ちに監視されることを示します。値が最初にバインドされると、次のように設定されます: 即時: true
  • ハンドラ: オブジェクトを監視するときに使用します。変更が発生すると、ハンドラ内のメソッドが実行されます。
  • deep: オブジェクトと配列内のプロパティの変更を詳細に監視することを示します。設定: deep: true
エクスポートデフォルト{
    データ(){
        戻る {
            番号: 1
        }
    },
    時計:
        // 数値属性をリッスンする number: {
			ハンドラ(newVal, oldVal){
                
            },
            即時: true, // すぐに聞く}
    }
}

(3)監視対象

  • オブジェクトの直接割り当て操作を監視できます
    • ただし、オブジェクト プロパティの追加、変更、または削除を監視することはできません。
エクスポートデフォルト{
    データ() {
        戻る {
            オブジェクト: {
                1: 1
            }
        }
    },
    時計:
        オブジェクト: {
            ハンドラ(newVal){
                console.log('聞いている', newVal)
            },
            即時: 真
        }
    },
    作成された(){
        // 属性の変更操作であるため監視できません // 一度印刷すると、印刷結果は変更された値になります。
        この.obj.a = 2 

        // オブジェクトへの直接割り当て操作なので監視できます // 2 回印刷します (即時監視は 1 回印刷され、変更は 1 回印刷されます)
        this.obj = {a: 2} 
    }
}

Vueはインスタンスを初期化するときにプロパティのゲッター/セッター変換処理を実行するため

したがって、Vueがそれを変換してレスポンシブにするには、データオブジェクトにプロパティが存在する必要があります。

したがって、Vue はオブジェクト プロパティの追加、削除、変更などの操作を検出できません。

デフォルトでは、ハンドラーはオブジェクトの内部プロパティへの参照の変更のみを監視します。

したがって、割り当て操作を実行するときにのみリッスンします。

  • オブジェクトのプロパティ値を直接監視できます
    • このプロパティが基本型の値である場合は、通常どおり監視できます。
エクスポートデフォルト{
    時計:
        'obj.a': {
            ハンドラ(newVal){
                コンソールログ(新しい値)
            }
        }
    },
    作成された(){
        // 次の両方とも監視して 2 回印刷できます this.obj.a = 2
        this.obj = {a:2}
    }
}
  • deepプロパティを使用すると、詳細な監視が可能です。
    • 既存のプロパティの変更のみを監視でき、新しいプロパティは監視できません。
    • Vueはthis.$setを監視して元の属性の変更を変更することはできません

これは、this.$set() がデータの初期値を変更することと同等であるためです。

監視をトリガーすることはできますが、変更は反映されません。つまり、newVal === oldValです。

エクスポートデフォルト{
    時計:
        オブジェクト: {
            ハンドラ(newVal){
            	コンソールログ(新しい値)
            },
            深い:本当、
            即時: 真
        }
    },
    作成された(){
        // 詳細な監視の後、属性の変更も直接監視できます // 2 回印刷します (即時のため)
        この.obj.a = 2
        
        // オブジェクト プロパティの追加を監視できません // 一度印刷すると、印刷結果は新しく追加されたプロパティを持つオブジェクトになります // つまり、即時であるため 1 回だけ実行され、{a:1,b:2} が印刷されます
        この.obj.b = 2
        
        // 監視はトリガーできますが、変更は監視できません // 2 回印刷され、両方の値は {a:2} であり、変更を反映できません this.$set(this.obj, 'a', 2)
    }
}

(4)リスニングアレイ

  • 監視可能
    • 配列の直接割り当て
    • 配列メソッドによる追加、変更、削除操作
    • this.$set() メソッドによる配列操作

pop()、push() などの配列メソッド、および this.$set(arr, index, newVal) メソッド

監視をトリガーすることはできますが、変更を反映することはできません。つまり、newVal === oldVal です。

  • 監視できません
    • 配列の非配列メソッドの追加、削除、変更操作を監視できません
    • インデックス値を通じて配列の変更を直接監視することはできません。
    • 配列の長さの変化を監視できません
エクスポートデフォルト{
    データ() {
        戻る {
            編曲: [1]
        }
    },
    時計:
        編曲: {
            ハンドラ(newVal, oldVal) {
                console.log('新規:', newVal)
                console.log('古い:', 古い値)
            },
            即時: 真
        }
    },
    作成された() {
        // 監視可能 --- 配列全体を直接割り当てる this.arr = [2]
        
        // 監視できません --- インデックスの割り当て、長さの変更 this.arr[1] = 2
        this.arr[0] = 2
        この.arr.長さ = 2
        
        // 監視をトリガーできますが、変更を監視することはできません => 新しい値と古い値は同じです this.arr.push(2)
        this.$set(this.arr, 0, 2)
    }
}

02. 計算プロパティ

(1)属性計算のための設定法

  • 計算プロパティは、関数ではなくオブジェクトとして記述できます。ただし、関数形式では、デフォルトで get メソッドを使用します。オブジェクトとして記述する場合は、set メソッドも使用できます。
計算: {
  フルネーム:
    得る () {
      `${this.firstName} ${this.lastName}` を返します。
    },
    設定(値) {
      const names = val.split(' ');
      this.firstName = 名前[0];
      this.lastName = names[names.length - 1];
    }
  }
}

this.fullName = 'Aresn Liang' を実行すると、計算されたセットが呼び出され、firstName と lastName が Aresn と Liang に割り当てられます。

計算結果は、他の計算結果や他のコンポーネントのデータに依存する場合があります。

(2)違い

  • 計算プロパティとリスナー
    • 計算プロパティとは、従属値の変化を監視することです。
      • 依存関係の値が変更されない限り、キャッシュは再利用のために直接読み取られます。
      • 計算プロパティは非同期操作でのデータ変更に対応できない
      • 手動で呼び出す必要がある
    • リスナーウォッチは、属性値の変更を監視します。
      • プロパティ値が変更されるたびに、コールバック関数がトリガーされます
      • リスナーは非同期操作中にデータの変更に応答できます
      • 自動トリガー
  • 計算プロパティとメソッド
    • メソッドはメソッドなので、パラメータを受け入れることができますが、計算はできません。
    • 計算結果はキャッシュ可能だが、メソッドはキャッシュできない

(3)利用シナリオ

  • プロパティが複数のプロパティの影響を受ける場合は、computed が必要です。
  • 1つのデータが複数のデータに影響を与える場合は、データを検索するなどウォッチを使用する必要があります。

以上がvue WatchとComputedの使い方の詳しいまとめです。vue WatchとComputedの使い方についてさらに詳しく知りたい方は、123WORDPRESS.COM内の他の関連記事もぜひご覧ください!

以下もご興味があるかもしれません:
  • Vue.js の watch メソッドと computed メソッドの違いの詳細な例
  • Vue の computed と watch の違いを理解する方法
  • Vueのcomputedとwatchの違いは何ですか?
  • Vue の watch と computed の詳細な説明
  • Vue における watch と computed の違いと使い方
  • Vue における computed と watch の違い
  • Vue における watch、computed、updated の違いと使い方
  • Vueの計算プロパティとウォッチの違いを簡単に理解する
  • Vue における計算プロパティ、メソッド、監視の違い
  • Vue の computed と watch の類似点と相違点の詳細な説明
  • Vue の computed と watch の違いを分析する

<<:  MySQL 5.7.18 インストーラーのインストール ダウンロード グラフィック チュートリアル

>>:  Dockerでnginxをデプロイし、設定ファイルを変更する方法

推薦する

mysql indexof関数の使用手順

以下のように表示されます。 LOCATE(部分文字列、文字列)文字列 str 内の部分文字列 sub...

Nginx がサーバーの生存状態をパッシブにチェックする詳細な説明

導入定期的にヘルスチェックを送信して、アップストリーム グループ内の HTTP サーバーのヘルスを監...

3つのDocker Nginxログの処理の詳細な説明

社内の同僚は Nginx ログの標準出力、つまりコンソール経由の処理を必要としているため、まずログを...

サーバーの購入と初期構築方法

しばらくサーバーいじってなかったけど、やることがなくなったのでモバイルワークスに行って海外サーバーを...

MySQL json 形式のデータクエリ操作

デフォルトのテーブル名はbase_dataで、json列名はjson_valueです。 json_v...

nginx ロケーション優先度の詳細な説明

場所表現タイプ~ は大文字と小文字を区別して通常の一致を実行することを示します~*は大文字と小文字を...

複数の HTML ページで HTML コードをまとめて呼び出す方法

方法 1: スクリプト方式を使用する:共通ヘッダー ファイル head.js または共通フッター フ...

Windows 10 での MySQL 8.0.16 のインストールと設定のチュートリアル

この記事では、参考までにMySQL 8.0.16のインストールと設定方法のグラフィックチュートリアル...

CSSは背景画像の画面適応を実現する

ログインページなどのホームページを作成する場合、大きな背景画像を配置する必要があり、さまざまな画面の...

Linux ファイルとユーザー管理の実践

1. /etc ディレクトリ内の、文字以外の文字で始まり、その後に文字と任意の長さのその他の文字が続...

MySQL設定ファイルを変更できない問題の解決方法(Win10)

他の人のために解決した問題を記録します。問題の説明MySQLのバージョンは5.7、オペレーティングシ...

HTML+CSS でハートビートの特殊効果を作成する

今日は、シンプルなハートビート効果を作成します。多くのコードは必要ありません。ボックスを追加し、CS...

FileZilla_Server:425 データ接続を開けない問題を解決する方法

FileZilla Serverをサーバーにインストールすると、425データ接続を開けない問題が発生...

react setStateの詳細な説明

目次setState は同期ですか、それとも非同期ですか?カスタム合成イベントと React フック...