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.
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!

Csanimationsarenotinherenthardbutrequirepracticeandundunderpanderofcsspropertiesandtimingfunctions.1) startwithsimpleanimationslikescalingabuttonhoverusingkeyframes.2)

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

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

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.

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.

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.

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.

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.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

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.
