Vue の計算プロパティとプロパティリスニングについての簡単な説明

Vue の計算プロパティとプロパティリスニングについての簡単な説明

1. 計算プロパティ

意味

  • 計算されたプロパティ: 使用するプロパティが存在しないため、既存のプロパティから計算する必要があります。計算されたプロパティには、計算された新しい構成項目が必要です。
  • Vue の場合、data 内のデータは属性です。Vue 内のデータが変更される限り、テンプレートは再解析され、補間構文内のメソッドが再度呼び出されます。

原理

  • 基になるレイヤーは、Object.defineproperty メソッドによって提供されるゲッターとセッターを使用します。

get 関数はいつ実行されますか?

  • これは最初の読み取り中に 1 回実行されます。
  • 依存データが変更されると再度呼び出されます。

利点

  • メソッドの実装と比較すると、内部キャッシュ メカニズム (再利用) があり、より効率的でデバッグが容易です。

述べる

  • 計算されたプロパティは最終的に vm (Vue インスタンス) に表示され、直接読み取って使用できるようになります。
  • 計算プロパティを変更する場合は、変更に対応するセット関数を記述する必要があり、計算が依存するデータをセット内で変更する必要があります。

構文: 1. 省略形:

 計算: {
     「計算されたプロパティ名」() {
         「値」を返す
     }
 }

要件: 2つの数字の合計を計算し、ページに表示する

<テンプレート>
  <div>
    <p>{{ 数値 }}</p>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  データ(){
    戻る {
      10,
      20歳
    }
  },
  // 計算されたプロパティ:
  // シナリオ: 変数の値を別の変数を使用して計算する必要がある/*
    文法:
    計算: {
      計算されたプロパティ名() {
        戻り値}
    }
  */
 // 注: 計算属性とデータ属性はどちらも変数であるため、同じ名前を持つことはできません // 注 2: 関数内で変数が変更された場合、結果は自動的に再計算され、計算結果が返されます: {
    数値(){
      this.a + this.b を返す
    }
  }
}
</スクリプト>

<スタイル>

</スタイル>

文法: 2. 文章を完成させる:

計算プロパティは構成オブジェクトの形式で記述されます。オブジェクトではget関数とset関数が使用されます。

get の役割: 誰かが fullName を読み取ると、get が呼び出され、戻り値が計算プロパティの値として使用されます (get は return を書き込む必要があります)

いつ呼び出されますか? 1. fullName が初めて読み取られるとき。 2. 依存するデータが変更された場合。

 得る(){
                console.log('get が呼び出されました')
                // console.log(this) // this は vm (Vue インスタンス) です
                this.firstName + '-' + this.lastName を返します
            },
            

set: 計算プロパティの値が変更されると、呼び出されたパラメータは渡された新しい値を受け取ります。

  ...
  計算:{
      フルネーム:
          //get の機能は何ですか?誰かが fullName を読み取ると、get が呼び出され、戻り値が fullName の値として使用されます。//get はいつ呼び出されますか? 1. fullName が初めて読み取られるとき。 2. 依存するデータが変更された場合。
          得る(){
              console.log('get が呼び出されました')
              // console.log(this) // これはvmです
              this.firstName + '-' + this.lastName を返します
          },
          //set はいつ呼び出されますか? fullName が変更されたとき。
          設定(値){
              console.log('set',値)
              定数 arr = value.split('-')
              this.firstName = arr[0]
              this.lastName = arr[1]
          }
      }
  }
})    

2. モニタリング(リスニング)特性

<!-- イベントをバインドする場合: @xxx="yyy" yyy はいくつかの簡単なステートメントを記述できます -->
<button @click="isHot = !isHot">天気を切り替える</button>

1. 監視属性の監視:

監視対象の属性が変更されると、ハンドラコールバック関数が自動的に呼び出され、関連する操作が実行されます。

監視対象の属性は、監視する前に存在している必要があります。 !

      ...
      // 記述方法 1. ishot 属性をリッスンするためのウォッチ構成を渡します。watch:{
          ホット:{
              immediate:true、//初期化中にハンドラを呼び出す //ハンドラはいつ呼び出されますか? isHot が変化するとき。
              
              ハンドラー(新しい値、古い値){
                  console.log('isHot が変更されました', newValue, oldValue)
              }
          }
      }
  })
  
  
  // 方法 2. vm.$watch('isHot',{ を介して監視する
   immediate:true, //初期化中にハンドラを呼び出す。デフォルトは false
   // ハンドラはいつ呼び出されますか? isHot が変化するとき。
   handler(newValue,oldValue){ // パラメータは2つあり、1つは新しい値、もう1つは古い値です。 console.log('isHot が変更されました',newValue,oldValue)
   }
})

2. 徹底的な監視

ディープモニタリング:

  • 1) デフォルトでは、Vue のウォッチはオブジェクト (1 つのレイヤー) の内部値の変化を監視しません。
  • 2) deep:true を設定すると、オブジェクトの内部値の変化を監視できます(マルチレイヤー)。

述べる:

  • 1) Vue 自体はオブジェクトの内部値の変化を監視できますが、Vue が提供するウォッチはデフォルトではそれができません。
  • 2) ウォッチを使用する場合、データの具体的な構造に基づいてディープモニタリングを使用するかどうかを決定します。
データ:{
	isHot:true、
	数字:
		a:1、
		1:1 1:1
	}
},
時計:{
	// マルチレベル構造内の特定の属性の変更を監視します (元の記述方法では引用符を追加する必要があり、省略形は省略できますが、この場合は追加する必要があります。そうしないとエラーが報告されます)
	/* '数値.a': {
		ハンドラ(){
			console.log('a が変更されました')
		}
	} */
	// マルチレベル構造番号内のすべての属性の変更を監視します:{
		deep:true, // これが有効になっていない場合、監視は数値のアドレスが変更されたかどうかになります handler(){
			console.log('数値が変更されました')
		}
	}
}

監視プロパティ - 省略形

監視プロパティに handler() のみがあり、他の構成項目を有効にする必要がない場合は、これを省略できます。

時計:{
	isHot(新しい値、古い値){
		console.log('isHot が変更されました',newValue,oldValue,this)
	}
}

/* vm.$watch('isHot',関数(newValue,oldValue) {
	console.log('isHot が変更されました',newValue,oldValue,this)
}) */

3. 相違点と原則

計算と監視の違い

  • ウォッチは、コンピューティングで実行できるすべての機能を実行できます。
  • watch が完了できる関数は、computed では完了しない可能性があります。たとえば、watch は非同期操作を実行できます。

2つの重要な原則

  • Vue によって管理されるすべての関数は、通常の関数として記述するのが最適です。そのため、 this は vm またはコンポーネント インスタンス オブジェクトを指します。
  • Vue によって管理されないすべての関数 (タイマー コールバック関数、Ajax コールバック関数、Promise コールバック関数など) は、this が vm またはコンポーネント インスタンス オブジェクトを指すように、矢印関数として記述するのが最適です。
時計:{
	firstName(値){
		タイムアウトを設定します(()=>{
			console.log(this) //vueインスタンスオブジェクト。通常の関数が使用されると、Windowが返されます。
			this.fullName = val + '-' + this.lastName
		},1000);
	},
	姓(val){
		this.fullName = this.firstName + '-' + val
	}
}

要約する

これで、Vue の計算プロパティとプロパティ リスニングに関するこの記事は終了です。Vue の計算プロパティとプロパティ リスニングに関する関連コンテンツをさらにご覧になりたい場合は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue 計算プロパティ実装トランスクリプト
  • Vue の計算プロパティ
  • Vue の計算プロパティの紹介
  • Vueは計算プロパティを使用して動的スライダーの作成を完了します
  • Vue 監視プロパティと計算プロパティ
  • Vue の計算プロパティとデータ取得方法
  • Vue の計算プロパティをご存知ですか?
  • Vueの計算プロパティ名ケースの3つの実装方法

<<:  HTMLでマスクレイヤーを実装する方法 HTMLでマスクレイヤーを使用する方法

>>:  Springboot プロジェクトに動的にパラメータを渡すための Docker の実装方法

推薦する

Dockerでボリュームを管理する2つの方法

前回の記事では、Dockerの基礎知識であるローカルディレクトリのマウント方法を紹介しました。今日は...

要素UIテーブルはドロップダウンフィルタリング機能を実現します

この記事の例では、要素UIテーブルにドロップダウンフィルタリングを実装するための具体的なコードを参考...

HTML/CSS での空白処理とページ内の空白を保持する方法

HTML の空白ルールHTML では、コンテンツ内の複数のスペースは通常 1 つとみなされ、連続する...

Linux の grep コマンドと egrep コマンドの詳細な説明

反復/egrep構文: grep [-cinvABC] 'word' ファイル名-c...

JavaScript 関数はランダムな色の検証コードをカプセル化します (完全なコード)

数字、文字、またはランダムな色の数字と文字の混合で構成される n 桁の確認コード。以下に完全なコード...

mysqlはストアドプロシージャを使用してツリーノード取得メソッドを実装します。

図に示すように: テーブルデータこのようなツリーの場合、「Gao Yinrui」の下のすべてのノード...

JSはじゃんけんゲームを実装します

この記事の例では、じゃんけんゲームを実装するためのJSの具体的なコードを参考までに共有しています。具...

CSS ワールド - コード実践: 画像の Alt 情報の表示

ただし、デフォルトの src を持つ <img> 要素を使用してスクロール読み込み効果を...

docker コンペ応募でよく使われるコマンドのまとめ

アカウントにログイン DOCKER_REGISTRY=registry.cn-hangzhou.al...

shtmlとhtmlの違い

Shtml と asp は似ています。shtml という名前のファイルでは、asp の命令と同様に、...

ReactとReduxの関係を詳しく説明

目次1. reduxとreactの関係2. Reactのマルチコンポーネント共有3. reduxの3...

NodeJSのモジュール性に関する詳細な説明

目次1. はじめに2. 本文2.1 モジュールとは何ですか? 2.2 解決2.3、require.r...

MYSQLでプロシージャの名前を変更する方法の詳細な説明

最近、ストアド プロシージャの名前を変更する機能を使用しました。インターネットで情報を検索しましたが...

MySQL への接続時に発生する 1449 および 1045 例外の解決方法

MySQL への接続時に発生する 1449 および 1045 例外の解決方法 mysql 1449:...

vue ルーティング ビュー router-view のネストされたジャンプの実装

目次1. app.vueページを修正する2. ログインページを作成する (/views/login/...