Rumah > Artikel > hujung hadapan web > [Kompilasi dan Perkongsian] Beberapa soalan temu bual frekuensi tinggi Vue
Kali ini saya akan berkongsi dengan anda beberapa soalan temu bual biasa tentang Vue untuk membantu anda menyusun pengetahuan asas dan meningkatkan rizab pengetahuan Vue anda Adalah berbaloi untuk dikumpulkan, datang dan lihat!
Apa yang saya kongsikan ialah beberapa soalan temuduga Vue yang biasa, tetapi ia tidak mewakili semua. Jika ada sesuatu yang salah dalam artikel, sila nyatakan Jika anda mempunyai sebarang keraguan atau mempunyai soalan temuduga lain, anda juga boleh meninggalkan mesej di ruang komen untuk dikongsi bersama.
Komunikasi komponen ibu bapa-anak: props
dan event
, v-
model
, .sync
, ref
, $parent
dan
$children
. (Belajar perkongsian video: tutorial video vue)
Komunikasi komponen bukan ibu bapa-anak: $attr
dan $listeners
,
provide
dan inject
, eventbus
, diakses melalui contoh akar $root
, vuex
, dispatch
dan
brodcast
vue 2.0v-model
digunakan untuk mencipta pengikatan dua hala pada kawalan atau komponen borang.
Intipatinya ialah gula sintaksis untuk v-bind
dan v-on
, dalam
Jika anda menggunakan v-model
pada komponen, komponen bernama value
akan terikat pada komponen secara lalai.
prop
dan acara bernama input
.
Vue3.0
Dalam 3.x, mentakrifkan v-model
pada komponen adalah bersamaan dengan menghantar modelValue
prop
dan menerima acara update:modelValue
yang dilemparkan
Terdapat dua perbezaan utama antara Vuex dan objek global:
Storan keadaan Vuex adalah responsif. Apabila komponen Vue membaca keadaan dari kedai, jika kedai Status dalam isasi, maka komponen yang sepadan akan dikemas kini dengan cekap sewajarnya.
Anda tidak boleh terus menukar keadaan dalam kedai. Satu-satunya cara untuk menukar keadaan dalam kedai adalah dengan melaksanakannya secara eksplisit (komit)mutasi. Ini membolehkan kami menjejaki perubahan dengan mudah dalam setiap negeri, membolehkan kami melaksanakan beberapa tugas Alat membantu kami memahami aplikasi kami dengan lebih baik.
Proses pemaparan: Komponen mesti dipasang hanya selepas semua sub-komponen dipasang. Pemasangan selesai, jadi komponen yang dipasang dipasang selepas sub-komponen dipasang
⽗sebelumCreate -> ⼼dibuat -> ⼼beforeMount -> ⼦dilekapkan -> ⽗dipasang
⼦ proses kemas kini komponen:
⽗ proses kemas kini komponen:
Proses pemusnahan: ⽗sebelum Musnah -> dimusnahkan -> ⽗dimusnahkan
kelihatan seperti banyak dan sukar untuk diingati, selagi anda memahaminya, tidak kira apa keadaannya, ia mestilah komponen induk yang menunggu sub-. komponen untuk diselesaikan. Selepas selesai, cangkuk lengkap yang sepadan akan dilaksanakan, dan anda boleh mengingati dengan mudah
v-if
akan memusnahkan dan membina semula pendengar acara dan sub-komponen blok bersyarat semasa proses penukaran, jika syarat awal adalah palsu , maka tiada apa yang akan dilakukan sehingga syarat itu benar buat kali pertama.
Modul pencelupan.
v-show
Hanya tukar berdasarkan css, tanpa mengira keadaan awal
Semuanya akan diberikan.
Jadi, v-if
penukaran overhed adalah lebih besar, ⽽ v-show
overhed pemaparan awal adalah lebih besar
⼼, lebih sesuai apabila anda perlu menukar dengan kerap atau bahagian DOM yang anda tukar sangat kompleks.
sesuai. Jika ia jarang ditukar selepas rendering, lebih sesuai digunakan v-show
. v-if
boleh membawa kepada XSS dengan mudah? serangan. Jadi ia hanya boleh dalam kredibiliti Gunakan v-html pada kandungan dan tidak boleh digunakan pada kandungan yang diserahkan pengguna.
key
ialah satu-satunya vnode
yang dinyatakan untuk setiap id
dan dalam yang sama
Semasa proses vnode
perbezaan, anda boleh membandingkan key
dengan cepat untuk menentukan sama ada
Sama ada mereka adalah nod yang sama, dan keunikan key
boleh digunakan untuk menjana map
untuk mendapatkan lebih cepat
Dapatkan nod yang sepadan.
Selepas menyatakan key
sebagai tambahan, strategi "guna semula di tempat" tidak akan digunakan lagi, yang boleh memastikan ketepatan pemaparan.
.
v-for
dan v-if
berada pada nod yang sama , keutamaan v-
for
adalah lebih tinggi daripada v-if
, yang bermaksud v-if
akan diulang secara berasingan
Berjalan di dalam setiap gelung v-for
. Jika tatasusunan yang akan dilalui adalah sangat besar, tetapi data sebenar yang akan dipaparkan adalah sangat kecil
, yang akan menyebabkan banyak pembaziran prestasi. computed
untuk menapis data terlebih dahulu. Perbezaan:
Paparan URL, mod cincang mempunyai "#", mod sejarah tidak
memuat semula Apabila melihat halaman, mod cincang boleh dimuatkan secara normal ke halaman yang sepadan dengan nilai cincang, tetapi sejarah tidak mempunyai tempat. Jika dikendalikan dengan betul, 404 akan dikembalikan Secara amnya, bahagian belakang perlu dikonfigurasikan untuk mengubah hala semua halaman ke laluan halaman utama.
Keserasian. Hash boleh menyokong pelayar versi rendah dan IE
#
Perubahan dalam nilai cincang tidak akan menyebabkan penyemak imbas menghantar permintaan kepada pelayan dan penyemak imbas tidak akan menghantar permintaan.
Jika diminta, halaman tidak akan dimuat semula. Pada masa yang sama, dengan mendengar peristiwa pertukaran hash, anda boleh mengetahui perubahan yang telah berlaku dalam cincang, dan kemudian berdasarkan
Hash berubah untuk melaksanakan operasi mengemas kini sebahagian daripada kandungan pada halaman.
Pelaksanaan mod sejarah terutamanya dua API yang dikeluarkan oleh standard HTML5, pushState
dan
replaceState
, kedua-dua API ini boleh menukar url, tetapi tidak akan menghantar permintaan. Dengan cara ini anda boleh memantau
Dengar perubahan url untuk mengemas kini sebahagian daripada kandungan pada halaman.
Model-View-ViewModel
, iaitu meletakkan MVC
dalam
Controller
berkembang menjadi ViewModel
. Prosesnya diringkaskan seperti berikut:
1. Apabila komponen dimulakan, computed
dan data
akan dibuat masing-masing.
Sistem tindak balas ⾃, Observer
merentasi setiap tetapan atribut dalam data
get/set
Pemintasan data
2. Permulaan computed
akan memanggil fungsi initComputed
untuk mendaftarkan watcher
contoh dan membuat seketika dalam Dep
hilang
Pelanggan maklumat digunakan sebagai kebergantungan pengumpulan berikutnya (seperti watcher
fungsi pemaparan atau sifat terhitung diperhatikan yang lain.
Berubah watcher
)
akan mencetuskan Object.defineProperty
apabila memanggil sifat yang dikira
get
Fungsi aksesori
memanggil watcher.depend()
kepada pelanggan mesejnya sendiri
dep
subs
Tambahkan atribut lain pada watcher
panggil ⽤ watcher
kaedah evaluate
(panggil ke ⽽
Kaedah watcher
) menjadikan dirinya sebagai pelanggan pelanggan mesej get
yang lain, mula-mula berikan watcher
kepada watcher
, dan kemudian
Selepas melaksanakan fungsi penilaian Dep.target
, apabila mengakses sifat di dalam fungsi penilaian (seperti Tathagata
getter
, data
atau lain-lain props
),
juga akan mencetuskan computed
fungsi pengakses mereka daripada ⽽menambahkan get
harta yang dikira kepada pelanggan mesej watcher
harta itu watcher
dalam fungsi penilaian, apabila ini
Operasi selesai, dan akhirnya tutup dep
dan tetapkan kepada Dep.target
dan
Mengembalikan hasil fungsi penilaian. null
, dan kemudian hubungi pelanggan mesejnya sendiri
Kaedah set
dep
, semuanya berakhir
Tatasusunan notify
semua pelanggan wathcer
disimpan dalam dep semasa, dan satu demi satu
Panggil subs
daripada watcher
kaedah untuk melengkapkan kemas kini respons. update
Object.defineProperty
dan menggabungkannya dengan mod pemerhati capai. Vue menggunakan Object.defineProperty
dan observe
. getter
setter
Setiap tika komponen dalam Vue akan sepadan dengan tika watcher
dicetuskan
, akan memberitahu getter
, menyebabkan komponen yang berkaitan dengannya dipaparkan semula. setter
watcher
objek Object.defineProperty
, ⽽ ialah langsung objek proksi Proxy
disebabkan oleh
Hanya atribut boleh dirampas, dan setiap atribut objek perlu dilalui. Dan
Proksi boleh secara langsung proksi objek. Object.defineProperty
, kerana Object.defineProperty
merampas sifat objek,
Oleh itu, apabila menambah atribut, anda perlu melintasi objek sekali lagi dan menambah baharu
Tambahkan atribut dan gunakan Observe
untuk merampas. Itulah sebabnya menggunakan
Apabila Vue menambah atribut pada tatasusunan atau objek dalam Object.defineProperty
, anda perlu menggunakan Object.defineProperty
untuk
Pastikan atribut yang baru ditambah juga responsif. data
vm.$set
, ini
Proxy
tidak mempunyai. defineProperty
pada dasarnya tidak lagi disasarkan
Pengoptimuman seksual. Proxy
getter
setter
Proxy
Proxy
Observer
, yang sepadan
Saya tidak akan terus mencari kaedah. Kaedah penyusunan akan merangkumi beberapa kaedah yang akan meningkatkan indeks (__proto__
,
, ) untuk pemerhatian manual. push
unshift
splice
18. Apa yang nextTick lakukan dan apakah prinsipnya
nextTick
Untuk pelaksanaan tugas mikro, ia akan terlebih dahulu menyemak sama ada ia disokong.
Promise
, jika tidak disokong, tuding terus ke macrotask, dan pelaksanaan tugas makro akan disemak terlebih dahulu.
Uji sama ada ia disokong setImmediate
(disokong oleh versi IE dan Etage yang lebih tinggi Jika ia tidak disokong, semak sama ada ia disokong.
MessageChannel disokong. Jika ia masih tidak disokong, ia akhirnya akan diturunkan kepada setTimeout
0;Secara lalai, ia akan dilaksanakan sebagai tugas mikro terlebih dahulu, kerana tugas mikro boleh diselesaikan dalam satu; tandakan.
Pelaksanaan telah selesai, dan ia mempunyai prestasi yang lebih baik dalam beberapa adegan dengan lukisan semula dan animasi. v-on
: Sebab mengapa fungsi panggil balik dimasukkan ke dalam tatasusunan sekali
Daripada melaksanakan fungsi panggil balik terus dalam , ia adalah untuk memastikan berbilang panggilan boleh dilaksanakan dalam tanda yang sama.
Jika nextTick
dilaksanakan kali ini, berbilang tugas tak segerak tidak akan dimulakan, tetapi tugas tak segerak ini akan dimampatkan menjadi satu tugasan yang sama.
Tugas langkah akan dilaksanakan dalam tanda seterusnya. nextTick
nextTcik
Pada peringkat ini, pokok AST yang dijana akan dilalui secara mendalam untuk mengesan sama ada setiap subpokoknya adalah nod statik Jika ia adalah nod statik. DOM yang mereka hasilkan tidak perlu diubah, yang sangat mengoptimumkan kemas kini templat pada masa jalan.
1. Ke dalam kod
Gunakan kaedah jana untuk menukar ast ke dalam fungsi render.const code = generate(ast, options)20 Adakah anda tahu prinsip data responsif Vue3.x?
Proxy
Tentukan sama ada nilai pulangan semasa Reflect.get ialah Object Jika ya, gunakan kaedah reaktif sebagai proksi Ini Dengan cara ini, pemerhatian yang mendalam dicapai.Apabila memantau tatasusunan, get/set mungkin dicetuskan beberapa kali, jadi bagaimana untuk menghalang berbilang pencetus?
Kami boleh menentukan sama ada kunci ialah sifat sasaran objek proksi semasa dan kami juga boleh menentukan sama ada nilai lama dan nilai baharu adalah sama. Hanya apabila salah satu daripada dua syarat di atas dipenuhi, adalah mungkin untuk melaksanakan pencetus.21. Apakah pengoptimuman prestasi yang telah anda lakukan untuk Vue?
Cuba kurangkan data dalam data Data dalam data akan menambah pemerhati dan penyetel, dan pemerhati yang sepadan akan dikumpul
Prapemarahan
Kod mampatan
Skrin rangka
(Mempelajari perkongsian video:
pembangunan bahagian hadapan webAtas ialah kandungan terperinci [Kompilasi dan Perkongsian] Beberapa soalan temu bual frekuensi tinggi Vue. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!