Vue を使用してプロジェクトを開発する過程で、次のような問題によく遭遇します。Vue のデータでオブジェクトまたは配列 (配列内の値はオブジェクト) が宣言または割り当てられ、オブジェクトに新しい属性が追加された場合、この属性の値が更新されても、ビューは更新されません。 これは、新しく追加された属性がレスポンシブではないため、ビューの更新がトリガーされないためです。通常、静的メソッド Vue.set() またはインスタンスメソッド this.$set() を使用してこれを解決します。使用方法: オブジェクト: this.$set(ターゲット、キー、値) 配列: this.$set(ターゲット、インデックス、値) ただし、静的メソッド Vue.set() であってもインスタンスメソッド this.$set() であっても、基礎となる実装ロジックは同じであり、実装ロジックは次のようになります。 /** * オブジェクトにプロパティを設定します。新しいプロパティを追加し、 * プロパティが * すでに存在します。 */ エクスポート関数セット (ターゲット: 配列<any> | オブジェクト、キー: any、値: any): any { // まず、渡されたターゲットオブジェクトが未定義、null、プリミティブ(元の値)であるかどうかを判断します。そうでない場合は、警告をスローします。if (process.env.NODE_ENV !== 'production' && (isUndef(ターゲット) || isPrimitive(ターゲット)) ){ 警告(`未定義、null、またはプリミティブ値にリアクティブ プロパティを設定できません: ${(target: any)}`) } // ターゲットオブジェクトが配列であり、キーが有効なインデックスであるかどうかを確認します。if (Array.isArray(target) && isValidArrayIndex(key)) { // ターゲット配列の長さとキーの大きい方の値をターゲットの長さ属性として取得します。target.length = Math.max(target.length, key) // キー位置の要素をスプライスで置き換えます target.splice(key, 1, val) 戻り値 } // ターゲットオブジェクトにキーがすでに存在する場合は、それを直接割り当てます。if (key in target && !(key in Object.prototype)) { ターゲット[キー] = 値 戻り値 } // ターゲット内のオブザーバーオブジェクトを取得します。const ob = (target: any).__ob__ // ターゲットがvueインスタンスまたは$dataの場合、直接戻りますif (target._isVue || (ob && ob.vmCount)) { process.env.NODE_ENV !== 'production' && 警告( 'Vue インスタンスまたはそのルート $data にリアクティブ プロパティを追加しないでください ' + 「実行時 - データ オプションで事前に宣言します。」 ) 戻り値 } // obが存在しない場合は、ターゲットがレスポンシブなオブジェクトではないことを意味し、ビューの更新をトリガーせずに値が直接割り当てられます。if (!ob) { ターゲット[キー] = 値 戻り値 } // obが存在する場合は、キーをレスポンシブプロパティとして設定します。defineReactive(ob.value, key, val) // ビューの更新をトリガーする通知を送信します ob.dep.notify() 戻り値 } 上記はvueのsetメソッドのソースコードです。ここで注目すべきは、配列を処理する際に使用されるspliceメソッドは配列自体のメソッドではなく、vueにカプセル化されたレスポンシブな配列メソッドであるということです。 Vue の vue.$set() メソッドの詳細なソースコード事例に関するこの記事はこれで終わりです。Vue の vue.$set() メソッドのソースコードに関するより関連性の高い内容については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。皆様の今後の 123WORDPRESS.COM へのご支援をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: IDEA で Spring Boot プロジェクトをデプロイするためにリモート サーバー Docker に接続する方法の詳細なチュートリアル
この記事の例では、クリックしてカードを切り替える機能を実現するためのjsの具体的なコードを共有してい...
Web 開発では、チェックボックスは小さく、ユーザーにとって操作があまり便利ではないため、ユーザーが...
目次概要解決策 1: クロージャ解決策2: 構造を分割する解決策3:解決策4: setTimeout...
1. 圧縮と包装の概要一般的な圧縮ファイルウィンドウズ .rar .zip .7z Linux .z...
今日、会社のプロジェクトでは docker を設定する必要があります。Windows に正常にインス...
Python8のインストールを最小化した後、Python3.8.1をインストールしました。オンライン...
国内のネットワーク環境が悪化し続ける中、さまざまな改ざんや乗っ取りが後を絶たず、サイト全体をHTTP...
目次1 データベース インデックスを作成するための一般的なルールは次のとおりです。 2. 数千万件の...
目次アプリケーションシナリオ簡単に言えば、カスタム指示基本概念グローバルカスタマイズローカルカスタマ...
<br />テーブルは、昔から誰もが使ってきたタグで、今も使われています。しかし、現在の...
バイナリ docker 19.03 バージョンがインストール後に docker0 ブリッジを自動的に...
Windows と Linux 間でファイルを転送する場合は、Xftp ツールを使用できます。この...
IE ブラウザで「ホームページとして設定」および「お気に入りに追加」機能を実装する方法解決:指定さ...
WSLとはBaidu 百科事典からの一節を引用します。 Windows Subsystem for ...
目次起源環境情報トラブルシューティングのプロセス要約する起源顧客は CentOS をベースにしたカス...