検索
ホームページウェブフロントエンドVue.jsVueの反応性の原理を詳しく解説した記事

Vueの反応性の原理を詳しく解説した記事

Feb 13, 2023 pm 07:30 PM
フロントエンドデザインパターンvue.js

この記事は、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 の

reactive

システムがビューの更新を自動的にトリガーします。これは、依存関係グラフ内のデータの変更を追跡し、それをビューの更新に関連付けることによってこれを実現するためです。ここでは、簡単な例として、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 がどのように実装されているかを見てください: <pre class='brush:php;toolbar:false;'>function reactive(raw){ Object.keys(raw).forEach(ket=&gt;{ 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>このような単純なリアクティブ API が実装されています

しかし、ここでの欠点は明らかです:

Vue 2.x では、渡されるオブジェクトは直接

Vue.observable によって変更されました。Vue3 では、 応答性の高いプロキシを返しますが、ソース オブジェクトを直接変更しても応答しません。これにより、次のような問題が発生します。 :

オブジェクトのプロパティを
    追加または削除する場合、Vue は初期化時にプロパティのゲッター/セッター変換を実行するため、Vue2 の応答性を検出できません。インスタンスの場合、プロパティは
  • data に存在する必要があります。オブジェクトに存在する場合にのみ、Vue はそれを応答型に変換できます。 サブスクリプトと長さ の変更を検出できません
  • array
  • もちろん、これは歴史的な制限です。当時、ES5 は
  • Object.definProperty
しか選択できませんでしたが、 ES6 版では
Proxy

が増えていますが、この時点で Vue の応答式がバージョンアップされました Vue3 の Proxy

Vue3 は を使用していますデータ変更を監視するための Proxy Vue2 と比較して、上記の問題を解決するだけでなく、次の利点もあります:

vue を使用する必要がない.$set
でリアクティビティをトリガーし、コードの見栄えを良くします。
    はじめに
  • 包括的な配列変更検出、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 サイトの他の関連記事を参照してください。

声明
この記事は掘金社区で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Vue.jsの理解:主にフロントエンドフレームワークVue.jsの理解:主にフロントエンドフレームワークApr 17, 2025 am 12:20 AM

Vue.jsは、2014年にYou YuxiがリリースしたプログレッシブJavaScriptフレームワークで、ユーザーインターフェイスを構築します。その中心的な利点には、次のものが含まれます。1。レスポンシブデータバインディング、データ変更の自動更新ビュー。 2。コンポーネントの開発では、UIは独立した再利用可能なコンポーネントに分割できます。

Netflixのフロントエンド:React(またはVue)の例とアプリケーションNetflixのフロントエンド:React(またはVue)の例とアプリケーションApr 16, 2025 am 12:08 AM

Netflixは、Reactをフロントエンドフレームワークとして使用します。 1)Reactのコンポーネント開発モデルと強力なエコシステムが、Netflixがそれを選択した主な理由です。 2)コンポーネント化により、Netflixは複雑なインターフェイスをビデオプレーヤー、推奨リスト、ユーザーコメントなどの管理可能なチャンクに分割します。 3)Reactの仮想DOMおよびコンポーネントライフサイクルは、レンダリング効率とユーザーインタラクション管理を最適化します。

フロントエンドの風景:Netflixが選択にアプローチした方法フロントエンドの風景:Netflixが選択にアプローチした方法Apr 15, 2025 am 12:13 AM

Netflixのフロントエンドテクノロジーでの選択は、主にパフォーマンスの最適化、スケーラビリティ、ユーザーエクスペリエンスの3つの側面に焦点を当てています。 1。パフォーマンスの最適化:Netflixは、Reactをメインフレームワークとして選択し、SpeedCurveやBoomerangなどのツールを開発して、ユーザーエクスペリエンスを監視および最適化しました。 2。スケーラビリティ:マイクロフロントエンドアーキテクチャを採用し、アプリケーションを独立したモジュールに分割し、開発効率とシステムのスケーラビリティを改善します。 3.ユーザーエクスペリエンス:Netflixは、Material-UIコンポーネントライブラリを使用して、A/Bテストとユーザーフィードバックを介してインターフェイスを継続的に最適化して、一貫性と美学を確保します。

React vs. Vue:Netflixはどのフレームワークを使用していますか?React vs. Vue:Netflixはどのフレームワークを使用していますか?Apr 14, 2025 am 12:19 AM

netflixusesaCustomframeworkは、「ギボン」ビルトンリアクト、notreactorvuedirectly.1)チームエクスペリエンス:seice basedonfamperivity.2)projectomplerprojects:vueforsplerprojects、racefforcomplexones.3)customeforsneeds:reactofforsmorefloficailie.

フレームワークの選択:Netflixの決定を推進するものは何ですか?フレームワークの選択:Netflixの決定を推進するものは何ですか?Apr 13, 2025 am 12:05 AM

Netflixは、主に、パフォーマンス、スケーラビリティ、開発効率、エコシステム、技術的な負債、およびフレームワーク選択におけるメンテナンスコストを考慮しています。 1。パフォーマンスとスケーラビリティ:JavaとSpringbootが選択され、大規模なデータと高い同時リクエストを効率的に処理します。 2。開発効率とエコシステム:Reactを使用して、フロントエンド開発効率を向上させ、その豊富なエコシステムを利用します。 3.技術的な負債とメンテナンスコスト:node.jsを選択してマイクロサービスを構築して、メンテナンスコストと技術的債務を削減します。

Netflixのフロントエンドの反応、Vue、および未来Netflixのフロントエンドの反応、Vue、および未来Apr 12, 2025 am 12:12 AM

Netflixは、主にReactをフロントエンドフレームワークとして使用し、特定の機能のためにVUEによって補足されます。 1)Reactのコンポーネント化と仮想DOMは、Netflixアプリケーションのパフォーマンスと開発効率を向上させます。 2)VueはNetflixの内部ツールと小規模プロジェクトで使用されており、その柔軟性と使いやすさが重要です。

フロントエンドのvue.js:実際のアプリケーションと例フロントエンドのvue.js:実際のアプリケーションと例Apr 11, 2025 am 12:12 AM

Vue.jsは、複雑なユーザーインターフェイスを構築するのに適した進歩的なJavaScriptフレームワークです。 1)そのコア概念には、レスポンシブデータ、コンポーネント、仮想DOMが含まれます。 2)実際のアプリケーションでは、TODOアプリケーションを構築し、Vuerouterを統合することで実証できます。 3)デバッグするときは、vuedevtools and Console.logを使用することをお勧めします。 4)パフォーマンスの最適化は、V-IF/V-Show、リストレンダリング最適化、コンポーネントの非同期負荷などを通じて達成できます。

Vue.jsとReact:重要な違​​いを理解するVue.jsとReact:重要な違​​いを理解するApr 10, 2025 am 09:26 AM

Vue.JSは中小企業から中規模のプロジェクトに適していますが、Reactは大規模で複雑なアプリケーションにより適しています。 1。VUE.JSのレスポンシブシステムは、依存関係追跡を介してDOMを自動的に更新し、データの変更を簡単に管理できるようにします。 2.反応は一方向のデータフローを採​​用し、データは親コンポーネントから子コンポーネントに流れ、明確なデータフローと簡単な抽出構造を提供します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、