Vueの反応性の原理を詳しく解説した記事
この記事は、Vue を学習し、Vue の応答性の原則を深く理解するのに役立ちます。お役に立てば幸いです。
この記事は、レスポンシブ構文シュガーの譲渡を記念します
早速、本題に入りましょう。簡単な例を示します:
let a=3 let b=a*10 console.log(b)//30 a=4 console.log(b)//40
現時点では b=4*10 が必要ですが、#var## の前に ## を追加したとしても、これは明らかに不可能です。 # 変数のプロモーション
のみが行われ、指定した値はプロモーションされません。 現時点では、応答性の役割が反映されています。
import { reactive } from 'vue' let state = reactive({ a: 3 }) let b = computed(() => state.a * 10) console.log(b.value) // 30 state.a = 4 console.log(b.value) // 40
単純な
応答性 API のみが、変更を追跡する効果を実現できます。 [関連する推奨事項: vuejs ビデオ チュートリアル
、Web フロントエンド開発 ]
実際には、Vue3
reactive は本質的に、データの依存関係を追跡する依存関係グラフを作成することによる パブリッシュ/サブスクライブ モデル
です。依存関係グラフは、どのデータがどのデータに依存するかを説明するグラフです。データが変更されると、Vue 3 の
システムがビューの更新を自動的にトリガーします。これは、依存関係グラフ内のデータの変更を追跡し、それをビューの更新に関連付けることによってこれを実現するためです。ここでは、簡単な例として、Youda が Vue Master でデモしたコードをリストします。
class Dep{ constructor(value){ this.subscribers=new Set() this._value=value } get value(){ this.depend() return this._value } set value(newValue){ this._value=newValue this.notify() } depend(){ if(activeEffect){ this.subscribers.add(activeEffect) } } notify(){ this.subscribers.forEach(effect=>{ effect() }) } }
このコードを分析してみましょう:
subscribe
変数の値が変更されると、すべてのサブスクライバーに更新するように自動的に通知できます- 属性を購読者リストとして定義し、すべての購読者情報を保存します
depend- 関数は依存関係を管理するために使用されます。つまり、サブスクライバが依存する変数
notify- 関数が通知として使用されます。この変数の値はすべてのサブスクライバに対して変更されました
Vue2 の Object.defineProperty
実際には、 Vue2 の時代では応答性は
Object.defineProperty によって実装されていましたが、Vue3 では Proxy
に切り替えられました。その理由を実際のコードと組み合わせて見てみましょう。まず、 Vue2 がどのように実装されているかを見てください: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>function reactive(raw){
Object.keys(raw).forEach(ket=>{
const dep=new Dep()
let value=raw[key]
Object.definProperty(raw,key,{
get(){
dep.depend()
return value
},
//当属性发生
set(newValue){
value=newValue
dep.notify()
}
})
})
//这时候返回的原始对象已经具有响应性
return raw
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
このような単純なリアクティブ API が実装されています
しかし、ここでの欠点は明らかです:
Vue 2.x では、渡されるオブジェクトは直接Vue.observable によって変更されました。Vue3 では、
応答性の高いプロキシを返しますが、ソース オブジェクトを直接変更しても応答しません。これにより、次のような問題が発生します。 :
オブジェクトのプロパティをProxy追加または削除する場合、Vue は初期化時にプロパティのゲッター/セッター変換を実行するため、Vue2 の応答性を検出できません。インスタンスの場合、プロパティは
しか選択できませんでしたが、 ES6 版では- data
arrayに存在する必要があります。オブジェクトに存在する場合にのみ、Vue はそれを応答型に変換できます。
サブスクリプトと長さ
の変更を検出できません- Object.definProperty
もちろん、これは歴史的な制限です。当時、ES5 は
が増えていますが、この時点で Vue の応答式がバージョンアップされました Vue3 の Proxy
Vue3 は を使用していますデータ変更を監視するための Proxy Vue2 と比較して、上記の問題を解決するだけでなく、次の利点もあります:
でリアクティビティをトリガーし、コードの見栄えを良くします。はじめに
包括的な配列変更検出、Vue2 の無効な境界条件を排除します。 Vue3 で書かれたレスポンシブ コード。開発がより便利になります
- 実際のコードがどのようなものかを見てみましょう:
レスポンシブな方法は オブジェクトの依存関係を収集const reactiveHandles={ get(target,key,receiver){ const dep=getDep(target,key) dep.depend() return Reflect.get(target,key,receiver) }, set(target,key,value,receiver){ const dep=getDep(target,key) const result=Reflect.set(target,key,value,receiver) dep.notify() return result } }ログイン後にコピーVue3 の応答性の本質
ref
公式ドキュメントに次のような文があります: reactive のさまざまな制限() は、最終的には JavaScript が機能できないためです。すべての値の型に対する「参照」メカニズムと、リアクティブの制限は次のとおりです。
は、配列などの監視可能なデータ構造のみを処理できます。およびオブジェクト、およびプリミティブ データ型などの観察できないデータ構造は監視できません
#データが配置されているコンポーネントで定義されたデータのみを処理でき、グローバル変数は処理できませんのために生まれ、リアクティブの欠点を補っています。単純な単一の変数値に適しています(ただし、実際の開発では、ほとんどの場合、単なる参照です。はははは)基本データ型
- #そして今回はそれが必要です
- ref
がここにあり、ref は
ところで、レスポンシブ構文シュガーの提案がキャンセルされたのは残念です
(学習ビデオ共有: vuejs 入門チュートリアル 、基本プログラミング ビデオ )
以上がVueの反応性の原理を詳しく解説した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Java フレームワークにおけるデザイン パターンとアーキテクチャ パターンの違いは、デザイン パターンがソフトウェア設計における一般的な問題に対する抽象的な解決策を定義し、ファクトリ パターンなどのクラスとオブジェクト間の相互作用に焦点を当てていることです。アーキテクチャ パターンは、階層化アーキテクチャなどのシステム コンポーネントの編成と相互作用に焦点を当てて、システム構造とモジュールの間の関係を定義します。

VUE.JSは、中小規模のプロジェクトや迅速な反復に適していますが、Reactは大規模で複雑なアプリケーションに適しています。 1)Vue.jsは使いやすく、チームが不十分な状況やプロジェクトスケールが小さい状況に適しています。 2)Reactにはより豊富なエコシステムがあり、高性能で複雑な機能的ニーズを持つプロジェクトに適しています。

Vue.jsは、特にJavaScriptファンデーションを持つ開発者にとって、学ぶのは難しくありません。 1)その進歩的な設計とレスポンシブシステムは、開発プロセスを簡素化します。 2)コンポーネントベースの開発により、コード管理がより効率的になります。 3)使用例は、基本的および高度な使用法を示しています。 4)一般的なエラーは、vuedevtoolsを介してデバッグできます。 5)V-IF/V-Showや重要な属性を使用するなど、パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率を向上させることができます。

Vue.jsは、主にフロントエンド開発に使用されます。 1)ユーザーインターフェイスとシングルページアプリケーションの構築に焦点を当てた軽量で柔軟なJavaScriptフレームワークです。 2)Vue.jsのコアはその応答性データシステムであり、データが変更されるとビューは自動的に更新されます。 3)コンポーネントの開発をサポートし、UIを独立した再利用可能なコンポーネントに分割できます。

デコレータ パターンは、元のクラスを変更せずにオブジェクトの機能を動的に追加できる構造設計パターンです。抽象コンポーネント、具象コンポーネント、抽象デコレータ、具象デコレータの連携によって実装され、ニーズの変化に合わせてクラス機能を柔軟に拡張できます。この例では、ミルクとモカのデコレーターが総額 2.29 ドルで Espresso に追加されており、オブジェクトの動作を動的に変更するデコレーター パターンの力を示しています。

TDD は、高品質の PHP コードを作成するために使用されます。その手順には、テスト ケースを作成し、期待される機能を記述し、テスト ケースを失敗させることが含まれます。過度な最適化や詳細な設計を行わずに、テスト ケースのみが通過するようにコードを記述します。テスト ケースが合格したら、コードを最適化およびリファクタリングして、可読性、保守性、およびスケーラビリティを向上させます。

Guice フレームワークは、次のような多くの設計パターンを適用します。 シングルトン パターン: @Singleton アノテーションによってクラスのインスタンスが 1 つだけであることを保証します。ファクトリ メソッド パターン: @Provides アノテーションを使用してファクトリ メソッドを作成し、依存関係の注入中にオブジェクト インスタンスを取得します。戦略モード: アルゴリズムをさまざまな戦略クラスにカプセル化し、@Named アノテーションを通じて特定の戦略を指定します。

Java フレームワークでデザイン パターンを使用する利点には、コードの可読性、保守性、拡張性の向上が含まれます。欠点としては、複雑さ、パフォーマンスのオーバーヘッド、使いすぎによる学習曲線の急上昇などが挙げられます。実際のケース: プロキシ モードはオブジェクトの遅延読み込みに使用されます。デザイン パターンを賢く使用して、その利点を活用し、欠点を最小限に抑えます。
