Vue での this.$set の使用に関する詳細な説明

Vue での this.$set の使用に関する詳細な説明

Vue での this.$set の使用

背景: フロントエンド プロジェクトを書いていたとき、バックエンドから json オブジェクトが提供され、それをページ上にレンダリングしました。しかし、私自身のニーズにより、返されたオブジェクトにフィールドを追加したいので、フィールドをプッシュします。フィールドは追加されますが、ページのレンダリングは変わりません。後で、応答がないことに気が付きました。この新しいフィールドをレスポンシブにしたい場合は、this.$set を使用してデータを挿入する必要があります。

Vue のデータでオブジェクトまたは配列 (配列内の値はオブジェクト) が宣言または割り当てられている場合、オブジェクトに新しいプロパティを追加してこのプロパティの値を更新しても、ビューは更新されません。

使用

this.$set( target, key, value)

target : 操作対象となる配列またはオブジェクトであるデータソースを表します。

key : 操作対象となるフィールド

value : 変更するデータ

ここに小さな例を示します。

オブジェクトにageプロパティを追加し、応答的に変更する

ここに画像の説明を挿入

<テンプレート>
  <div class="text">
      <p>{{リスト}}</p>
      <button @click="add">年齢++</button>
  </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
    データ(){
        戻る {
            リスト:{ 名前: "張三"}
        }
    },
    メソッド: {
        追加(){
            if(!this.list.age){ // age属性がない場合は、age属性を追加します this.list.age=18
            }それ以外{
                this.list.age++
            }
            console.log(このリスト)
        }
    }
}
</スクリプト>

this.$set使用してオブジェクト プロパティを追加しない場合、効果は次のようになります。

データは確かに追加されていますが、ページは age プロパティをレスポンシブにレンダリングしません。

ここに画像の説明を挿入

this.$set(this.list,'age',18)使用して属性を追加します。効果:

ここに画像の説明を挿入

追加されたデータが応答性があることがわかります。

なぜレスポンシブなのか?

よく見ると、this.$set に get age メソッドと set age メソッドが追加されていることがわかります。これがレスポンシブである理由です。

ここに画像の説明を挿入

分析する

Vue のレスポンシブ原則は、JavaScript オブジェクトがデータ オプションとして Vue インスタンスに渡されることです。Vue はこのオブジェクトのすべてのプロパティを走査し、Object.defineProperty を使用してこれらすべてのプロパティをゲッター/セッターに変換します。これらのゲッター/セッターはユーザーには見えませんが、内部的には Vue が依存関係を追跡し、プロパティがアクセスされて変更されたときに変更を通知できるようにします。ここで注意すべき点は、コンソールにデータ オブジェクトを出力するときに、ブラウザーによって getter/setter のフォーマットが異なることです。次の図は公式ドキュメントからの抜粋です。

ここに画像の説明を挿入

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue.set() と this.$set() の使い方と違い
  • Vue での this.$set の動的データバインディングのケーススタディ
  • Vue エラー TypeError の解決方法: this.$set は関数ではありません
  • Vue.set() this.$set() はビューの更新と考慮をトリガーします
  • Vue ソースコードから Vue.set() と this.$set() を解析する

<<:  Zabbixを使用してOracleテーブルスペースの操作プロセスを監視する

>>:  IE6 での PNG アルファ透明度 (完全コレクション)

推薦する

4つの柔軟なScssコンパイル出力スタイル

多くの人は、Scss を使用する瞬間からコンパイル方法を説明されてきました。したがって、コマンドのコ...

フォームのデフォルトの送信方法を変更する方法

htmlのデフォルトの送信方法は、postではなくgetです。postに変更したい場合は、 meth...

HTML Webページ作成チュートリアル iframeタグを慎重に使用してください

iframe を使用すると、他の Web サイトのページを簡単に呼び出すことができますが、注意して使...

Javascript を使用して、スライドバー効果のあるスライドナビゲーション プラグインを開発します。

目次1. はじめに2. 使用方法3. 開発プロセス1. モデル例2. イベントとアニメーション4. ...

MySQL sql_modeの適切な設定に関する詳細な説明

MySQL sql_modeの適切な設定sql_mode は見落とされやすい変数です。デフォルト値は...

Linux でのログ サーバーの設定に関するグラフィック チュートリアル

序文この記事では、Linux 構成ログ サーバーに関する関連コンテンツを主に紹介し、参考と学習のため...

JS でシンプルなデータ監視を実装する方法

目次概要最初のステップステップ2なぜ別の _data が必要なのでしょうか?データにもう少しデータを...

Tomcat コアコンポーネントとアプリケーションアーキテクチャの詳細な説明

目次Web コンテナとは何ですか? HTTP の性質HTTP リクエスト応答の例クッキーとセッション...

SQL文のANDとORの実行順序で発生する問題

質問昨日、データベースSQLを書いているときに問題が発生しました。問題の根本は、SQL ステートメン...

ウェブサイトをより高く、よりデザイン的に見せる方法

「ウェブサイトを高級感のあるものにするにはどうすればいいでしょうか? それともデザイン重視にすればい...

Centos7のホスト名を変更する3つの方法

方法 1: hostnamectl の変更ステップ1 ホスト名を確認するホスト名ステップ2 ホスト名...

要素 UI に基づいてクエリ コンポーネントを段階的にカプセル化する方法

目次関数基本的なクエリ関数クエリ条件の初期化ページのレンダリングクエリと表示の最適化をさらに強化プル...

Docker を使用した war パッケージ プロジェクトのデプロイの実装

Docker で war をデプロイするには、コンテナを使用する必要があります。ここでは tomca...

モバイル端末の適応に関する簡単な説明

序文フロントエンド コードの記述では、「互換性」という言葉から逃れることはできません。過去の PC ...

CSSスタイルのカスケーディングルールの詳細な説明

CSS スタイル ルール構文スタイルは、CSS の基本単位です。各スタイル ルールは、セレクターと宣...