cari
Rumahhujung hadapan webtutorial cssCara Membuat LocalStorage Reaktif di Vue

Sistem responsif Vue.js adalah salah satu kekuatan terasnya, tetapi ia mungkin merasa misteri kepada sesiapa yang tidak memahami mekanisme asasnya. Sebagai contoh, mengapa ia berfungsi dengan objek dan tatasusunan tetapi tidak dengan perkara lain seperti LocalStorage? Artikel ini akan menjawab soalan ini dan menunjukkan bagaimana untuk mendapatkan sistem responsif Vue untuk bekerja dengan LocalStorage.

Cara Membuat LocalStorage Reaktif di Vue

Jika anda menjalankan kod berikut, anda akan mendapati bahawa kaunter dipaparkan sebagai nilai statik dan tidak akan berubah seperti yang dijangkakan kerana perubahan selang dalam localStorage:

 Vue baru ({
  EL: "#counter",
  data: () => ({
    Kaunter: localStorage.getItem ("kaunter")
  }),
  dikira: {
    Walaupun () {
      kembali ini.Counter % 2 == 0;
    }
  },
  Templat: `<div>
    <div>Kaunter: {{counter}}</div>
    <div>Kaunter adalah {{walaupun? 'walaupun': 'ganjil'}}</div>
  </div>`
});
 // some-other-file.js
setInterval (() => {
  const counter = localStorage.getItem ("counter");
  localStorage.setItem ("kaunter", kaunter 1);
}, 1000);

Walaupun harta counter dalam contoh VUE responsif, ia tidak berubah hanya kerana kita menukar sumbernya di LocalStorage.

Terdapat banyak cara untuk menyelesaikan masalah ini, dan cara terbaik adalah menggunakan VUEX dan menyimpan nilai -nilai yang disimpan diselaraskan dengan LocalStorage. Tetapi bagaimana jika kita hanya memerlukan penyelesaian semudah dalam contoh ini? Kita mesti mempunyai pemahaman yang mendalam tentang bagaimana sistem responsif Vue berfungsi.

Responsif dalam Vue

Apabila Vue memulakan contoh komponen, ia memerhatikan pilihan data . Ini bermakna ia akan melangkah ke atas semua sifat dalam data dan menukarnya kepada getter/setter menggunakan Object.defineProperty . Dengan menetapkan setter tersuai untuk setiap harta, VUE dapat mengetahui apabila harta itu berubah dan dapat memberitahu kebergantungan yang perlu bertindak balas terhadap perubahan tersebut. Bagaimanakah ia tahu kebergantungan mana yang bergantung kepada harta tertentu? Dengan memanfaatkan getters, ia boleh didaftarkan apabila sifat -sifat yang dikira, fungsi pemerhati, atau fungsi akses fungsi data.

 // teras/instance/state.js
fungsi initdata () {
  // ...
  Perhatikan (data)
}
 // Core/Observer/Index.js
fungsi eksport memerhati (nilai) {
  // ...
  Pemerhati Baru (nilai)
  // ...
}

Observer Kelas Eksport {
  // ...
  pembina (nilai) {
    // ...
    ini.walk (nilai)
  }

  berjalan (obj) {
    kekunci const = object.keys (obj)
    untuk (biarkan i = 0; i <kunci.length i definisi kunci><p> Jadi, mengapa LocalStorage tidak responsif? <strong>Kerana ia bukan objek dengan atribut.</strong></p>
<p> Tetapi tunggu. Kami tidak dapat menentukan getters dan setters dengan tatasusunan, tetapi di Vue, array masih responsif. Ini kerana tatasusunan adalah kes khas di Vue. Untuk mempunyai tatasusunan responsif, Vue menulis semula kaedah array di belakang tabir dan mengintegrasikannya dengan sistem responsif Vue.</p>
<p> Bolehkah kita melakukan sesuatu yang serupa dengan LocalStorage?</p>
<h3 id="Tulis-semula-fungsi-localStorage"> Tulis semula fungsi localStorage</h3>
<p> Pertama, kita dapat menetapkan contoh awal kita dengan mengatasi kaedah LocalStorage untuk mengesan contoh komponen yang meminta projek LocalStorage.</p>
<p> // peta antara kunci projek localStorage dan senarai contoh vue yang bergantung pada const storeItemSubscribers = {};</p>
<p> const getItem = window.localstorage.getItem; localStOrage.getItem = (Key, Target) => {Console.info ("GET", KEY);</p>
<p> // mengumpul contoh vue bergantung jika (! StoreItemSubscribers [key]) StoreItemSubscribers [key] = []; jika (sasaran) storeItemSubscribers [key] .push (sasaran);</p>
<p> // panggil fungsi asal kembali getItem.call (localStorage, kunci); };</p>
<p> const setItem = window.localstorage.setItem; localStorage.setItem = (kunci, nilai) => {console.info ("tetapan", kunci, nilai);</p>
<p> // Kemas kini nilai dalam contoh Vue yang bergantung kepada jika (StoreItemSubscribers [key]) {StoreItemSubscribers [key] .foreach ((dep) => {if (Dep.hasownProperty (key)) DEP [key] = value;}); }</p>
<p> // panggil fungsi asal setItem.call (localStorage, kunci, nilai); };</p>
<p> // ... (selebihnya kod adalah sama dengan teks asal)</p>
<p> Dalam contoh ini, kami telah mendefinisikan semula <code>getItem</code> dan <code>setItem</code> untuk mengumpul dan memberitahu komponen yang bergantung kepada projek -projek LocalStorage. Dalam <code>getItem</code> baru, kami merekodkan komponen yang meminta item mana, dan dalam <code>setItem</code> kami menghubungi semua komponen yang meminta item dan menulis semula sifat datanya.</p>
<p> Agar kod di atas berfungsi, kita perlu menyampaikan rujukan kepada contoh komponen untuk <code>getItem</code> , yang mengubah tandatangan fungsinya. Kita tidak boleh menggunakan fungsi anak panah lagi, jika tidak, kita tidak akan mempunyai nilai yang betul <code>this</code> .</p>
<p> Jika kita mahu berbuat lebih baik, kita perlu menggali lebih mendalam. Sebagai contoh, bagaimanakah kita dapat menjejaki kebergantungan tanpa lulus secara eksplisit?</p>
<h3 id="Cara-mengumpulkan-kebergantungan-di-vue"> Cara mengumpulkan kebergantungan di vue</h3>
<p> Untuk inspirasi, kita boleh kembali ke sistem responsif Vue. Kami telah melihat sebelum ini apabila mengakses harta data, getter harta data melanggan pemanggil untuk perubahan lagi kepada harta itu. Tetapi bagaimana ia tahu siapa yang membuat panggilan? Apabila kita mendapat atribut data, fungsi getternya tidak mempunyai input tentang siapa pemanggil. Fungsi getter tidak mempunyai input. Bagaimanakah ia tahu siapa yang akan mendaftar sebagai kebergantungan?</p>
<p> Setiap atribut data mengekalkan senarai kebergantungannya yang perlu bertindak balas dalam kelas <code>Dep</code> . Jika kita menggali lebih mendalam ke dalam kelas ini, kita dapat melihat bahawa apabila ketergantungan didaftarkan, kebergantungan itu sendiri telah ditakrifkan dalam pemboleh ubah sasaran statik. Matlamat ini ditetapkan oleh kelas <code>Watcher</code> misteri setakat ini. Sebenarnya, apabila sifat data berubah, pemerhati ini sebenarnya akan diberitahu bahawa mereka akan memulakan komponen semula komponen atau pengkomputeran semula sifat-sifat yang dikira.</p>
<p> Tetapi, sekali lagi, siapa mereka?</p>
<p> Apabila Vue membuat pilihan data yang dapat dilihat, ia juga mewujudkan pemerhati untuk setiap fungsi atribut yang dikira serta semua fungsi pemerhatian (yang tidak boleh dikelirukan dengan kelas <code>Watcher</code> ) dan fungsi rendering untuk setiap contoh komponen. Observer adalah seperti teman dengan fungsi ini. Mereka melakukan dua perkara utama:</p>
<ol>
<li> <strong>Mereka menilai fungsi pada masa penciptaan.</strong> Ini mencetuskan koleksi kebergantungan.</li>
<li> <strong>Apabila mereka diberitahu bahawa nilai yang mereka bergantung pada telah berubah, mereka mengubah fungsi mereka.</strong> Ini akhirnya akan mengira semula sifat-sifat yang dikira atau membuat semula keseluruhan komponen.</li>
</ol>
<p> Langkah penting berlaku sebelum pemerhati memanggil fungsi yang mereka bertanggungjawab: <strong>mereka menetapkan diri mereka sebagai sasaran dalam pembolehubah statik dalam kelas <code>Dep</code> .</strong> Ini memastikan bahawa apabila atribut data responsif diakses, mereka didaftarkan sebagai kebergantungan.</p>
<h3 id="Jejak-Siapa-yang-Memanggil-LocalStorage"> Jejak Siapa yang Memanggil LocalStorage</h3>
<p> Kita tidak boleh melakukan ini sepenuhnya kerana kita tidak dapat mengakses mekanisme dalaman Vue. Walau bagaimanapun, kita boleh menggunakan idea Vue untuk membiarkan pemerhati menetapkan sasaran dalam harta statik sebelum memanggil fungsi yang bertanggungjawab. Bolehkah kita menetapkan rujukan kepada contoh komponen sebelum memanggil LocalStorage?</p>
<p> Jika kita mengandaikan bahawa LocalStorage dipanggil apabila menetapkan pilihan data, maka kita boleh mengikat untuk <code>beforeCreate</code> dan <code>created</code> . Kedua -dua cangkuk ini dipecat sebelum dan selepas permulaan pilihan data, jadi kami boleh menetapkannya dan kemudian membersihkan pemboleh ubah sasaran dengan merujuk kepada contoh komponen semasa (kami boleh mengaksesnya dalam cangkuk kitaran hayat). Kemudian, dalam getter adat kami, kami boleh mendaftarkan sasaran ini sebagai kebergantungan.</p>
<p> Perkara terakhir yang perlu kita lakukan ialah menjadikan kitaran hidup ini sebahagian daripada semua komponen kami. Kita boleh melakukan ini menggunakan Global Mixin untuk keseluruhan projek.</p>
<p> // ... (selebihnya kod adalah sama dengan teks asal)</p>
<p> Sekarang, apabila kita menjalankan contoh awal, kita akan mendapat kaunter yang meningkatkan bilangan sesaat.</p>
<p> // ... (selebihnya kod adalah sama dengan teks asal)</p>
<h3 id="Akhir-percubaan-pemikiran-kita"> Akhir percubaan pemikiran kita</h3>
<p> Walaupun kami menyelesaikan masalah awal, ingatlah bahawa ini adalah eksperimen pemikiran. Ia tidak mempunyai beberapa ciri, seperti pengendalian projek yang dipadam dan contoh komponen yang dipasang. Ia juga mempunyai beberapa batasan, seperti nama harta contoh komponen perlu sama dengan nama projek yang disimpan di LocalStorage. Yang mengatakan, matlamat utama adalah untuk lebih memahami bagaimana sistem responsif Vue berfungsi di belakang tabir dan memanfaatkannya, jadi saya harap itulah yang anda dapatkan dari semuanya.</p></kunci.length>

Atas ialah kandungan terperinci Cara Membuat LocalStorage Reaktif di Vue. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Animasi CSS: Adakah sukar untuk mencipta mereka?Animasi CSS: Adakah sukar untuk mencipta mereka?May 09, 2025 am 12:03 AM

Csanimationsarenotinherenthardbutrequirepracticeandundunderpanderofcsspropertiesandtimingfunctions.1) startwithsimpleanimationslikescalingabuttonhoverusingkeyframes.2)

@KeyFrames CSS: Trik yang paling banyak digunakan@KeyFrames CSS: Trik yang paling banyak digunakanMay 08, 2025 am 12:13 AM

@keyframesispopularduetoitsversatilityAndPowerIncreatingSmoothcsSanimations.KeyTrickSinclude: 1) definisiMoothTransitionSbetweenStates, 2) AnimatingMultiplePropertiSti

Kaunter CSS: Panduan Komprehensif untuk Penomboran AutomatikKaunter CSS: Panduan Komprehensif untuk Penomboran AutomatikMay 07, 2025 pm 03:45 PM

Csscountersareusedtomanageautomaticnumberinginwebdesigns.1) mereka yang boleh dimanfaatkan, listitems, andcustomnumbering.2) AdvancedusesIndenestedNumberingsystems.3) cabaran yang terkandung di dalam cabaran

Bayang-bayang tatal moden menggunakan animasi yang didorong oleh tatalBayang-bayang tatal moden menggunakan animasi yang didorong oleh tatalMay 07, 2025 am 10:34 AM

Menggunakan bayang -bayang skrol, terutamanya untuk peranti mudah alih, adalah sedikit UX yang telah diliputi oleh Chris sebelum ini. Geoff merangkumi pendekatan yang lebih baru yang menggunakan harta animasi-masa. Berikut adalah satu lagi cara.

Mengkaji semula peta imejMengkaji semula peta imejMay 07, 2025 am 09:40 AM

Mari kita lari melalui penyegaran cepat. Peta imej tarikh kembali ke HTML 3.2, di mana, pertama, peta sisi pelayan dan kemudian peta sisi klien yang ditakrifkan di atas imej menggunakan elemen peta dan kawasan.

Negeri Devs: Tinjauan untuk Setiap PemajuNegeri Devs: Tinjauan untuk Setiap PemajuMay 07, 2025 am 09:30 AM

Kajian Negeri Devs kini dibuka untuk penyertaan, dan tidak seperti tinjauan sebelumnya ia meliputi segala -galanya kecuali kod: kerjaya, tempat kerja, tetapi juga kesihatan, hobi, dan banyak lagi. 

Apakah grid CSS?Apakah grid CSS?Apr 30, 2025 pm 03:21 PM

CSS Grid adalah alat yang berkuasa untuk mewujudkan susun atur web yang rumit dan responsif. Ia memudahkan reka bentuk, meningkatkan kebolehcapaian, dan menawarkan lebih banyak kawalan daripada kaedah yang lebih lama.

Apakah CSS Flexbox?Apakah CSS Flexbox?Apr 30, 2025 pm 03:20 PM

Artikel membincangkan CSS Flexbox, kaedah susun atur untuk penjajaran yang cekap dan pengedaran ruang dalam reka bentuk responsif. Ia menerangkan penggunaan Flexbox, membandingkannya dengan grid CSS, dan butiran sokongan penyemak imbas.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.