国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
Vueの応答性
ホームページ ウェブフロントエンド CSSチュートリアル VueでLocalStorageをリアクティブにする方法

VueでLocalStorageをリアクティブにする方法

Apr 04, 2025 am 10:16 AM

Vue.JSのレスポンシブシステムは、その中心的な強(qiáng)みの1つですが、その根底にあるメカニズムを理解していない人には神秘的に感じるかもしれません。たとえば、なぜオブジェクトや配列で動作しますが、LocalStorageのような他のものでは機(jī)能しませんか?この記事では、この質(zhì)問に答えて、VueのレスポンシブシステムをLocalStorageで動作させる方法を示します。

VueでLocalStorageをリアクティブにする方法

次のコードを?qū)g行すると、カウンターが靜的値として表示され、LocalStorageの間隔の変化のために予想どおりに変更されないことがわかります。

新しいVue({
  EL:「#counter」、
  データ:()=>({
    カウンター:localStorage.getItem( "counter")
  })、
  計算:{
    平() {
      this.counter%2 == 0を返します。
    }
  }、
  テンプレート: `<div>
    <div>カウンター:{{counter}}</div>
    <div>カウンターは{{偶數(shù)? 「偶數(shù)」:「奇妙な '}}</div>
  </div>`
});
 // some-other-file.js
setInterval(()=> {
  const counter = localstorage.getitem( "counter");
  localStorage.setItem( "counter"、counter 1);
}、1000);

Vueインスタンス內(nèi)のcounterプロパティは応答性がありますが、LocalStorageでソースを変更したからといって変更されません。

この問題を解決するには多くの方法があり、最良の方法はおそらくVuexを使用して、LocalStorageと同期して保存された値を維持することです。しかし、この例のように単純なソリューションが必要な場合はどうでしょうか? Vueのレスポンシブシステムがどのように機(jī)能するかを深く理解する必要があります。

Vueの応答性

Vueがコンポーネントインスタンスを初期化すると、 dataオプションが観察されます。これは、 data內(nèi)のすべてのプロパティを反復(fù)し、 Object.definePropertyを使用してGetter/Setterに変換することを意味します。各プロパティにカスタムセッターを設(shè)定することにより、Vueはプロパティがいつ変更されるかを知ることができ、変更に対応する必要がある依存関係に通知することができます。どの依存関係が特定のプロパティに依存するかをどのようにして知っていますか?ゲッターを活用することにより、計算されたプロパティ、オブザーバー関數(shù)、またはレンダリング関數(shù)アクセスデータプロパティをレンダリングすると登録できます。

 // core/instance/state.js
関數(shù)initdata(){
  // ...
  観察(データ)
}
 // core/observer/index.js
エクスポート関數(shù)監(jiān)視(値){
  // ...
  新しいオブザーバー(価値)
  // ...
}

クラスオブザーバーをエクスポートする{
  // ...
  Constructor(value){
    // ...
    this.walk(value)
  }

  walk(obj){
    const keys = object.keys(obj)
    for(i = 0; i <keys.length i defineteactive><p>それでは、なぜLocalStorageは反応がないのですか?<strong>屬性を持つオブジェクトではないからです。</strong></p>
<p>しかし、待ってください。アレイを備えたゲッターとセッターを定義することはできませんが、Vueでは、アレイは依然として応答します。これは、アレイがVueの特別なケースであるためです。レスポンシブな配列を持つために、Vueは舞臺裏の配列メソッドを書き直し、Vueのレスポンシブシステムと統(tǒng)合しました。</p>
<p> LocalStorageに似たことをすることはできますか?</p>
<h3> LocalStorage関數(shù)を書き直します</h3>
<p>まず、LocalStorageメソッドをオーバーライドして、どのコンポーネントインスタンスがLocalStorageプロジェクトを要求したかを追跡することにより、最初の例を修正できます。</p>
<p> // LocalStorage Project Keyとそれに依存するVueインスタンスのリストの間のマップconst storeitemsubscribers = {};</p>
<p> const getItem = window.localStorage.getItem; localStorage.getItem =(key、target)=> {console.info( "gething"、key);</p>
<p> //依存するVUEインスタンスを収集する場合(!storeItemsubscribers [key])storeItemsubscribers [key] = []; if(target)storeItemsubscribers [key] .push(target);</p>
<p> //元の関數(shù)を呼び出してくださいgetItem.call(localStorage、key); };</p>
<p> const setItem = window.localStorage.setItem; localStorage.setItem =(key、value)=> {console.info( "siting"、key、value);</p>
<p> // if(storeitemsubscribers [key]){storeitemsubscribers [key] .foreach((dep)=> {if(dep.hasownProperty(key))dep [key] = value;}); }</p>
<p> //元の関數(shù)setItem.call(localStorage、key、value)を呼び出します。 };</p>
<p> // ...(コードの殘りの部分は元のテキストと同じです)</p>
<p>この例では、 <code>getItem</code>と<code>setItem</code>を再定義して、LocalStorageプロジェクトに依存するコンポーネントを収集および通知しました。新しい<code>getItem</code>では、どのコンポーネントがどのアイテムを要求するかを記録し、 <code>setItem</code>では、アイテムを要求してデータプロパティを書き換えるすべてのコンポーネントに連絡(luò)します。</p>
<p>上記のコードが機(jī)能するためには、コンポーネントインスタンスへの參照を<code>getItem</code>に渡す必要があります。矢印機(jī)能はもう使用できません。そうしないと、 <code>this</code>の正しい値はありません。</p>
<p>私たちがもっとうまくやりたいなら、私たちはより深く掘り下げる必要があります。たとえば、依存関係を明示的に渡さずにどのように依存関係を追跡するのですか?</p>
<h3> Vueで依存関係を収集する方法</h3>
<p>インスピレーションのために、Vueのレスポンシブシステムに戻ることができます。その前に、データプロパティにアクセスすると、データプロパティのgetterは、そのプロパティをさらに変更するために発信者を購読しています。しかし、誰が電話をかけたのかをどのようにして知っていますか?データ屬性を取得すると、そのゲッター機(jī)能には、発信者が誰であるかについての入力がありません。ゲッター機(jī)能には入力がありません。誰が依存関係として登録するかをどのようにして知っていますか?</p>
<p>各データ屬性は、 <code>Dep</code>クラスで反応する必要がある依存関係のリストを維持します。このクラスをより深く掘り下げると、依存関係が登録されるたびに、依存関係自體が既に靜的ターゲット変數(shù)で定義されていることがわかります。この目標(biāo)は、これまでに神秘的な<code>Watcher</code>クラスによって設(shè)定されています。実際、データプロパティが変更されると、これらのオブザーバーは、コンポーネントの再レンダリングまたは計算プロパティの再計算を開始することを?qū)g際に通知されます。</p>
<p>しかし、繰り返しますが、彼らは誰ですか?</p>
<p> Vueがデータオプションを観察可能にすると、各コンポーネントインスタンスのすべての観測関數(shù)(Watcherクラスと混同しないでください)とすべての観測関數(shù)( <code>Watcher</code>クラスと混同しないでください)と同様に、各コンポーネントインスタンスのレンダリング関數(shù)も作成します。オブザーバーは、これらの機(jī)能の仲間のようなものです。彼らは2つの主なことをします:</p>
<ol>
<li>
<strong>作成時に機(jī)能を評価します。</strong>これにより、依存関係のコレクションがトリガーされます。</li>
<li>
<strong>彼らが依存している値が変化したことを通知されると、彼らは彼らの機(jī)能を再実行します。</strong>これにより、最終的に計算されたプロパティが再計算されるか、コンポーネント全體が再レンダリングされます。</li>
</ol>
<p>オブザーバーが責(zé)任のある関數(shù)を呼び出す前に重要なステップが発生します。<strong>彼らは<code>Dep</code>クラスの靜的変數(shù)のターゲットとして自分自身を設(shè)定します。</strong>これにより、応答性のあるデータ屬性にアクセスされると、依存関係として登録されます。</p>
<h3> LocalStorageと呼んだトラック</h3>
<p>Vueの內(nèi)部メカニズムにアクセスできないため、これは完全にはできません。ただし、VUEのアイデアを使用して、責(zé)任のある関數(shù)を呼び出す前に、観察者が靜的プロパティにターゲットを設(shè)定できるようにすることができます。 LocalStorageを呼び出す前に、コンポーネントインスタンスへの參照を設(shè)定できますか?</p>
<p>データオプションを設(shè)定するときにLocalStorageが呼び出されると仮定した場合、フック<code>beforeCreate</code>して<code>created</code>ことができます。これらの2つのフックは、データオプションの初期化の前後に発射されるため、現(xiàn)在のコンポーネントインスタンスを參照してターゲット変數(shù)を設(shè)定してからクリアできます(ライフサイクルフックでアクセスできます)。次に、カスタムゲッターでは、この目標(biāo)を依存関係として登録できます。</p>
<p>最後にしなければならないことは、これらのライフサイクルフックをすべてのコンポーネントの一部にすることです。これをプロジェクト全體でグローバルミックスインを使用して行うことができます。</p>
<p> // ...(コードの殘りの部分は元のテキストと同じです)</p>
<p>ここで、最初の例を?qū)g行すると、1秒あたりの數(shù)を増やすカウンターが表示されます。</p>
<p> // ...(コードの殘りの部分は元のテキストと同じです)</p>
<h3>思考実験の終わり</h3>
<p>最初の問題を解決しましたが、これは主に思考実験であることを忘れないでください。削除されたプロジェクトやアンインストールされたコンポーネントインスタンスの処理など、いくつかの機(jī)能がありません。また、コンポーネントインスタンスのプロパティ名は、LocalStorageに保存されているプロジェクト名と同じである必要があるなど、いくつかの制限があります。とはいえ、主な目標(biāo)は、Vue Responsiveシステムが舞臺裏でどのように機(jī)能し、それを最大限に活用するかをよりよく理解することです。</p></keys.length>

以上がVueでLocalStorageをリアクティブにする方法の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

「レンダリングブロッキングCSS」とは何ですか? 「レンダリングブロッキングCSS」とは何ですか? Jun 24, 2025 am 12:42 AM

ブラウザは、特にインポートされたスタイルシート、ヘッダーのインラインCSS、および最適化されていないメディアクエリスタイルを使用して、ブラウザがインラインおよび外部CSSをデフォルトで主要なリソースとして表示するため、ページレンダリングをブロックします。 1.重要なCSSを抽出し、HTMLに埋め込みます。 2。JavaScriptを介して非クリティカルなCSSの読み込みを遅らせる。 3.メディア屬性を使用して、印刷スタイルなどのロードを最適化します。 4.リクエストを減らすためにCSSを圧縮およびマージします。ツールを使用してキーCSSを抽出し、REL = "Preload"非同期負(fù)荷を組み合わせ、過度の分割と複雑なスクリプト制御を避けるためにメディア遅延荷重を合理的に使用することをお勧めします。

外部対內(nèi)部CSS:最良のアプローチは何ですか? 外部対內(nèi)部CSS:最良のアプローチは何ですか? Jun 20, 2025 am 12:45 AM

TheBestAppRoachforCSDependsonTheProject'sSpecificNeeds.forLargerProjects、externalCssissisbetterduetoMaintainasiladability; forsmallerProjectsOrsingLe-PageApplications、internalcsSmightBemoresuitable.it

私のCSSは小文字でなければなりませんか? 私のCSSは小文字でなければなりませんか? Jun 19, 2025 am 12:29 AM

いいえ、CSSDOESNOTHAVETOBEINLOWERCASE。

CSSケース感度:重要なことを理解する CSSケース感度:重要なことを理解する Jun 20, 2025 am 12:09 AM

cssismostlycase-inssensitive、buturlsandfontfamilynamesarecase-sensitive.1)propertiesandvalueslikecolor:red; areotcase-sensitive.2)urlsmustmatchtheserver'scase、例えば、/畫像/logo.png.3)

Autoprefixerとは何ですか?それはどのように機(jī)能しますか? Autoprefixerとは何ですか?それはどのように機(jī)能しますか? Jul 02, 2025 am 01:15 AM

Autoprefixerは、ターゲットブラウザスコープに基づいてCSS屬性にベンダープレフィックスを自動的に追加するツールです。 1.エラーで接頭辭を手動で維持する問題を解決します。 2. PostCSSプラグインフォーム、CSSを解析し、プレフィックスする必要がある屬性を分析し、構(gòu)成に従ってコードを生成する屬性を分析します。 3.使用手順には、プラグインのインストール、ブラウザーリストの設(shè)定、ビルドプロセスでそれらを有効にすることが含まれます。 4。メモには、接頭辭を手動で追加しない、構(gòu)成の更新を保持すること、すべての屬性ではなくプレフィックスを維持することが含まれ、プリ??プロセッサでそれらを使用することをお勧めします。

CSSカウンターとは何ですか? CSSカウンターとは何ですか? Jun 19, 2025 am 12:34 AM

csScountersCantAnationally-bersectionSandLists.1)usecounter-resettoinitialize、counter-incrementtoincrease、andcounter()orcounters()todisplayvalues.2)を組み合わせたjavascriptfordynamiccontenttoensureaCurateupdatesと組み合わせます。

CSS:ケースはいつ重要ですか(いつそうではありませんか)? CSS:ケースはいつ重要ですか(いつそうではありませんか)? Jun 19, 2025 am 12:27 AM

CSSでは、セレクターと屬性名はケースに敏感ですが、値、名前の色、URL、およびカスタム屬性はケースに敏感です。 1.バックグラウンドカラーや背景色など、セレクターと屬性名はケース非感受性です。 2。値の16進(jìn)數(shù)色は大文字と小文字を區(qū)別しますが、赤と赤などの名前の色は無効です。 3. URLは癥例に敏感であり、ファイルロードの問題を引き起こす可能性があります。 4.カスタムプロパティ(変數(shù))はケースに敏感であり、使用する場合はケースの一貫性に注意を払う必要があります。

CSSの癥例感度:説明されたセレクター、プロパティ、および値 CSSの癥例感度:説明されたセレクター、プロパティ、および値 Jun 19, 2025 am 12:38 AM

cssselectors andpropertynamesarecase-inssensitive、whilevaluescanbecase-sensitivedingoncontext.1)selectorslike'div'andiv'areequivalent.2)propertiessuchas'background-color'and'background-color'arecase-sensens

See all articles