Rumah > Artikel > hujung hadapan web > [Disusun dan dikongsi] Beberapa soalan temu bual Vue biasa (dengan analisis jawapan)
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!
MVVM ialah singkatan Model-View-ViewModel
, yang pada asasnya ialah versi dinaik taraf bagi model MVC
. Antaranya, Model
mewakili model data, View
mewakili halaman yang anda lihat dan ViewModel
ialah jambatan antara View
dan Model
Data akan terikat pada lapisan ViewModel
dan dipaparkan secara automatik data ke dalam halaman , apabila paparan berubah, lapisan ViewModel
akan dimaklumkan untuk mengemas kini data. Sebelum ini, paparan dikemas kini dengan mengendalikan DOM
, kini 数据驱动视图
.
Setiap tika komponen Vue akan melalui satu siri proses pemulaan selepas ia dibuat Semasa proses ini, fungsi yang dipanggil cangkuk kitaran hayat akan dijalankan. Ini memberi pengguna peluang untuk menambah kod mereka sendiri pada peringkat tertentu.
Kitaran hayat Vue boleh dibahagikan kepada 8 peringkat: sebelum dan selepas penciptaan, sebelum dan selepas pemasangan, sebelum dan selepas mengemas kini, sebelum dan selepas pemusnahan, serta kitaran hayat beberapa senario istimewa. Vue 3 juga menambah tiga adegan baharu untuk penyahpepijatan dan pemaparan sebelah pelayan. [Cadangan berkaitan: tutorial video vuejs, pembangunan bahagian hadapan web]
Kitaran hayat dalam Vue 2 | Kitaran hayat dalam Vue 3 | Penerangan | |||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
beforeCreate |
beforeCreate |
Sebelum penciptaan, data data dan kaedah belum dimulakan lagi . |
|||||||||||||||||||||||||||||||||||||||||||||
dibuat |
dibuat |
Selepas dibuat, Terdapat nilai dalam data , tetapi ia belum dipasang lagi Anda boleh membuat beberapa permintaan Ajax
|
|||||||||||||||||||||||||||||||||||||||||||||
beforeMount |
beforeMount |
Sebelum dipasang,
Render
|
|||||||||||||||||||||||||||||||||||||||||||||
dilekapkan |
dilekapkan |
Selepas dipasang, mempunyai telah dibuat dan boleh digunakan untuk mendapatkan data akses dan Elemen | |||||||||||||||||||||||||||||||||||||||||||||
beforeUpdate |
beforeUpdate code> |
Sebelum kemas kini , boleh digunakan untuk mendapatkan pelbagai status sebelum kemas kini | |||||||||||||||||||||||||||||||||||||||||||||
dikemas kini |
dikemas kini
| Selepas kemas kini, semua status adalah terkini | |||||||||||||||||||||||||||||||||||||||||||||
sebelum Musnah |
beforeUnmount td> |
Boleh digunakan untuk membatalkan beberapa pemasa atau langganan sebelum pemusnahan | |||||||||||||||||||||||||||||||||||||||||||||
dimusnahkan code> |
dinyahlekapkan |
Selepas pemusnahan, ia boleh digunakan untuk membatalkan beberapa pemasa atau langganan | |||||||||||||||||||||||||||||||||||||||||||||
diaktifkan |
kekal-hidup Apabila komponen cache diaktifkan |
||||||||||||||||||||||||||||||||||||||||||||||
dinyahaktifkan |
dinyahaktifkan |
kekalkan hidup Apabila komponen cache dinyahaktifkan |
|||||||||||||||||||||||||||||||||||||||||||||
errorCaptured |
errorCaptured |
Dipanggil semasa menangkap ralat daripada komponen turunan | |||||||||||||||||||||||||||||||||||||||||||||
— | renderTracked |
Kait nyahpepijat, dipanggil apabila kebergantungan reaktif dikumpul | |||||||||||||||||||||||||||||||||||||||||||||
— | renderTriggered |
Kait nyahpepijat, dipanggil apabila reaktif kebergantungan dicetuskan | |||||||||||||||||||||||||||||||||||||||||||||
— | serverPrefetch |
Dipanggil sebelum contoh komponen dipaparkan pada pelayan |
Kitaran hayat komponen ibu bapa-anak:
加载渲染阶段
: ibu bapa sebelumCreate -> -> ; kanak-kanak dibuat -> kanak-kanak dipasang -> 更新阶段
销毁阶段
ialah API global yang disediakan oleh Vue Disebabkan oleh strategi kemas kini tak segerak Vue, pengubahsuaian data kami tidak akan ditunjukkan secara langsung pada DOM pada masa ini, jika kami ingin mendapatkan kemas kini segera keadaan DOM, anda perlu menggunakan kaedah ini. Jika anda ingin mendapatkan struktur
yang dikemas kini serta-merta selepas mengubah suai data, anda boleh menggunakan nextTick
watcher
nextTick
Melaksanakan
kitaran hayat
DOM
Apakah yang berlaku semasa proses pemasangan contoh Vue? Vue.nextTick()
dan created
. DOM
app.mount()
Prinsip penyusunan templat Vue初始化
建立更新机制
, fungsi utamanya adalah untuk menyusun tulisan pengguna
Disusun menjadi fungsi boleh laku dalam js. patch
Dalam Vue, pengkompil akan terlebih dahulu menghuraikan vnode
Langkah ini dipanggil dom
Selepas tamat, objek JS akan diperoleh, dipanggil
compiler
Prinsip responsif Vuetemplate
render
template
parse
Responsif data dalam Vue 2 akan diproses secara berbeza mengikut jenis data. Jika ia adalah objek, pintas akses atribut objek melalui 抽象语法树AST
, dan rasa dan bertindak balas apabila data itu diakses atau diubah jika ia adalah tatasusunan, lanjutkan 7 kaedah perubahannya (tekan, pop) dengan mengatasi kaedah prototaip tatasusunan. , shift, unshift, splice, sort, reverse), supaya kaedah ini boleh melakukan pemberitahuan kemas kini tambahan untuk bertindak balas. AST
Kelemahan: transform
AST
render
Traversal rekursif semasa pemula akan menyebabkan kehilangan prestasi
Object.defineProperty(obj,key,descriptor)
dep
watcher
Vue.set
delete
ES6
DOM maya, seperti namanya, ialah objek DOM maya , yang itu sendiri adalah objek JS hanya menerangkan struktur pandangan melalui atribut yang berbeza. Map
Manfaat DOM maya:
(1) Peningkatan prestasi
Terdapat pengehadan untuk mengendalikan DOM secara langsung. Jika anda mengendalikannya secara langsung, ia akan Banyak kandungan atribut tambahan dimanipulasi, yang tidak diperlukan. Jika operasi ini dipindahkan ke objek JS, ia akan menjadi lebih mudah. Di samping itu, mengendalikan DOM agak mahal, dan operasi DOM yang kerap boleh menyebabkan lukisan semula halaman dan pengaliran semula dengan mudah. Jika pemprosesan perantaraan dilakukan melalui VNode abstrak, bilangan operasi DOM langsung boleh dikurangkan dengan berkesan, dengan itu mengurangkan lukisan semula halaman dan aliran semula.
(2) Mudah untuk pelaksanaan merentas platform
Nod VNod yang sama boleh dipaparkan ke dalam kandungan yang sepadan pada platform yang berbeza Contohnya: apabila dipaparkan dalam penyemak imbas, ia adalah nod elemen DOM dan apabila dipaparkan dalam Native (iOS, Android) ia menjadi kawalan yang sepadan. Vue 3 membolehkan pembangun melaksanakan pemapar tersuai berdasarkan VNode untuk memudahkan pemaparan untuk platform yang berbeza.
Struktur: Tiada standard bersatu untuk
, yang secara amnya merangkumi tiga item: tag
, props
dan children
. tag
: Diperlukan. Ia adalah label, atau ia boleh menjadi komponen, atau fungsi. props
: Pilihan. Ia adalah sifat dan kaedah pada label ini. children
: Pilihan. Ia ialah kandungan atau nod anak bagi teg ini. Jika ia adalah nod teks, ia adalah rentetan; jika ia mempunyai nod anak, ia adalah tatasusunan. Dalam erti kata lain, jika children
dinilai sebagai rentetan, ini bermakna ia mestilah nod teks dan nod ini mesti tiada unsur anak.
1 Konsep:
diff
algoritma perbandingan DOM maya lama dan DOM maya baharu untuk mengetahui nod maya mana yang telah berubah Cari nod maya ini dan hanya kemas kini nod sebenar yang sepadan dengan nod maya ini tanpa mengemas kini nod lain yang tidak berubah untuk mencapai ketepatan. sekali gus meningkatkan kecekapan.
2. Kaedah perbandingan:
diff
Strategi keseluruhan algoritma ialah: 深度优先,同层比较
. Perbandingan hanya akan dilakukan pada tahap yang sama, dan tidak akan dibandingkan merentasi peringkat semasa proses perbandingan, gelung akan mengecut dari kedua-dua belah ke tengah.
tag
kedua-dua nod adalah sama Jika ia berbeza, padamkan nod dan buat semula nod untuk penggantian. tag
Apabila ia adalah sama, gantikan atribut dahulu, dan kemudian bandingkan sub-elemen, yang dibahagikan kepada situasi berikut: patchVnode
untuk mengulangi proses mengikut situasi, panggil patch
untuk mencipta nod baharu, cari createElem
nod key
yang konsisten daripada jadual cincang, dan kemudian bahagikan mereka operasi situasi. VNode
ialah key
. 为了更加高效的更新虚拟 DOM
dan key
kedua-dua nod itu. Oleh itu, jika 元素类型tag
tidak ditetapkan, nilainya tidak ditentukan dan ia mungkin sentiasa dianggap bahawa ini adalah dua nod yang sama dan hanya operasi kemas kini boleh dilakukan, yang akan menyebabkan sejumlah besar operasi kemas kini DOM. key
dan anak kepada ibu bapa mencetuskan peristiwa melalui props
; melalui rantaian induk / Subchain juga boleh berkomunikasi ($emit
/$parent
) juga boleh mengakses contoh komponen; $children
ref
provide
inject
Komunikasi komponen adik-beradik: $attrs
$listeners
Bas acara global
Komunikasi komponen merentas peringkat: EventBus
Vuex
Bas acara global
.
Kaedah kawalan adalah berbeza. v-show
adalah dengan menambahkan atribut css display: none
pada elemen, tetapi elemen masih wujud manakala v-if
mengawal paparan atau menyembunyikan elemen dengan menambah atau memadam keseluruhan elemen.
Proses penyusunan adalah berbeza. v-if
Penukaran mempunyai proses penyusunan/penyahpasangan separa Semasa proses pensuisan, pendengar acara dalaman dan sub-komponen dimusnahkan dan dibina semula dengan sewajarnya v-show
Ia hanyalah pensuisan mudah berdasarkan css.
Syarat kompilasi adalah berbeza. v-if
ialah pemaparan bersyarat benar Ia akan memastikan pendengar acara dan subkomponen dalam blok bersyarat dimusnahkan dengan betul dan dibina semula semasa proses penukaran Apabila keadaan pemaparan adalah palsu, tiada operasi akan dilakukan sehingga ia benar.
Kitaran hayat pencetus adalah berbeza. Apabila v-show
berubah daripada palsu kepada benar, kitaran hayat komponen tidak akan dicetuskan; apabila v-if
berubah daripada palsu kepada benar, cangkuk beforeCreate
, created
, beforeMount
dan mounted
bagi komponen akan dicetuskan Apabila benar berubah kepada palsu, cangkuk beforeDestory
dan destoryed
komponen akan dicetuskan.
Penggunaan prestasi adalah berbeza. v-if
mempunyai kos penukaran yang lebih tinggi; v-show
mempunyai kos pemaparan awal yang lebih tinggi.
Senario penggunaan:
Jika anda perlu menukar sangat kerap, lebih baik menggunakan v-show
, seperti: menu akordion, halaman tab, dsb.;
Jika keadaan jarang berubah semasa runtime, lebih baik gunakan v-if
Contohnya, selepas pengguna log masuk, kandungan yang berbeza akan dipaparkan mengikut kebenaran yang berbeza.
computed
Sifat yang dikira bergantung pada sifat lain untuk mengira nilai Perubahan dalam sebarang kebergantungan dalaman akan melaksanakan semula fungsi yang dikira dicache apabila sifat yang dikira digunakan semula. Dapatkan nilai pulangan daripada cache dan atribut yang dikira mesti mempunyai kata kunci return
. watch
Kesan perubahan dalam data tertentu untuk mencetuskan fungsi. Apabila data ialah jenis objek, anda perlu menggunakan atribut pendengaran mendalam deep
apabila nilai atribut dalam objek berubah atau anda boleh menggunakan atribut immdiate
pendengaran segera apabila halaman pertama kali dimuatkan. Senario aplikasi:
Sifat yang dikira biasanya digunakan dalam pemaparan templat Nilai tertentu bergantung pada objek tindak balas lain atau sifat yang dikira sesuai untuk memerhatikan nilai tertentu melengkapkan logik perniagaan yang kompleks.
Dalam Vue 2, v-for
mempunyai keutamaan yang lebih tinggi daripada v-if
, yang bermaksud bahawa v-if
akan dijalankan berulang kali dalam setiap gelung v-for
. Jika tatasusunan yang akan dilalui adalah besar dan data sebenar yang akan dipaparkan adalah sangat kecil, ia akan menyebabkan pembaziran prestasi yang besar.
Dalam Vue 3, ia betul-betul bertentangan dengan v-if
mempunyai keutamaan yang lebih tinggi daripada v-for
, jadi apabila v-if
dilaksanakan, pembolehubah yang dipanggilnya belum wujud lagi, yang akan menyebabkan pengecualian. .
Biasanya terdapat dua situasi yang membawa kepada melakukan perkara ini:
v-for = "user in users" v-if = "user.active"
. Dalam kes ini, anda boleh menentukan sifat yang dikira dan biarkan ia mengembalikan senarai yang ditapis. v-for = "user in users" v-if = "showUsersFlag"
. Dalam kes ini, anda boleh mengalihkan v-if
ke elemen bekas atau membalutnya dengan lapisan template
. Anda boleh menambah data responsif secara manual untuk menyelesaikan masalah paparan perubahan data tidak mengemas kini. Apabila anda menetapkan secara langsung nilai item dalam tatasusunan atau secara langsung menetapkan nilai harta objek dalam projek, anda akan mendapati halaman itu tidak dikemas kini. Ini kerana had Object.defineProperty()
, perubahan data tidak boleh dipantau, yang boleh diselesaikan oleh this.$set(数组或对象,数组下标或对象的属性名,更新后的值)
.
keep-alive
Cache komponen juga berdasarkan nod VNode. Ia menyimpan cache komponen yang memenuhi syarat dalam objek cache, dan kemudian mengeluarkan nod VNode daripada objek cache dan menjadikannya apabila memaparkan semula. include
: rentetan atau ungkapan biasa, hanya komponen dengan nama yang sepadan akan dicache. exclude
: Rentetan atau ungkapan biasa, mana-mana komponen dengan nama yang sepadan tidak akan dicache. max
: Nombor, bilangan maksimum kejadian komponen yang boleh dicache. name
komponen Jika pilihan name
tidak tersedia, ia sepadan dengan nama pendaftaran setempatnya (nilai utama komponen komponen induk tidak boleh dipadankan. Komponen dengan keep-alive
set cache akan mempunyai dua lagi cangkuk kitaran hayat: activated
, deactivated
.
Apabila memasukkan komponen untuk kali pertama: sebelumBuat --> >Memasukkan komponen sekali lagi Apabila: diaktifkan --> sebelumKemas kini --> menyediakan cara yang sangat Fleksibel untuk mengedarkan fungsi boleh guna semula dalam komponen Vue.
mixin
Sumber pembolehubah yang tidak jelas
Berbilang campuran boleh menyebabkan konflik penamaan (penyelesaian: API Gabungan Vue 3)
Terdapat berbilang pasangan perhubungan antara mixin dan lubang komponen, menjadikan projek lebih kompleks.
untuk menentukan kedudukan pemaparan Struktur slot
boleh diletakkan dalam teg sebagai kandungan sandaran komponen induk sedang menggunakan Pada masa ini, anda boleh menulis kandungan terus dalam teg subkomponen dan bahagian kandungan ini akan dimasukkan ke dalam kedudukan teg slot
subkomponen. Jika komponen induk tidak menghantar kandungan ke slot apabila ia digunakan, kandungan sandaran akan dipaparkan pada halaman. slot
默认插槽
akan mempunyai nama tersirat <slot>
. Apabila digunakan dalam komponen induk, arahan DOM
menentukan slot elemen mana yang perlu diletakkan berdasarkan slot lalai Nilai <slot>
ialah nilai atribut slot komponen anak 具名插槽
dan satu elemen name
hanya boleh sepadan dengan satu slot yang ditempah, iaitu berbilang name
elemen tidak boleh menggunakan default
arahan menyatakan slot yang sama. Singkatan v-slot
ialah v-slot
, contohnya, name
boleh disingkatkan sebagai v-slot
. <template>
<template>
<template>
: Subkomponen mengikat v-slot
data pada teg v-slot
untuk menghantar data subkomponen kepada komponen induk untuk digunakan. Kaedah untuk komponen induk mendapatkan data prop mengikat slot: #
v-slot:header
#header
作用域插槽
<slot>
props
<template scope="接收的变量名">
<template slot-scope="接收的变量名">
Apakah pengubah suai dalam Vue? <template v-slot:插槽名="接收的变量名">
Pengubah suai borang lazy
Selepas mengisi maklumat, nilai akan diberikan kepada nilai hanya apabila kursor meninggalkan label, iaitu maklumat akan disegerakkan selepas change
acara. number
secara automatik menukar nilai input pengguna kepada jenis angka, tetapi jika nilai itu tidak dapat dihuraikan oleh parseFloat
, nilai asal akan dikembalikan. trim
Secara automatik menapis ruang pertama dan terakhir yang dimasukkan oleh pengguna, tetapi ruang di tengah tidak akan ditapis.
Pengubah suai acara stop
menghalang acara menggelegak, yang bersamaan dengan memanggil kaedah event.stopPropagation
. prevent
menghalang kelakuan lalai acara, yang setara dengan memanggil kaedah event.preventDefault
. self
hanya dicetuskan apabila event.target
ialah elemen semasa itu sendiri. once
Selepas mengikat acara, ia hanya boleh dicetuskan sekali, dan ia tidak akan dicetuskan untuk kali kedua. capture
Gunakan mod tangkapan peristiwa, iaitu peristiwa yang dicetuskan oleh elemen itu sendiri diproses di sini dahulu, dan kemudian diserahkan kepada elemen dalaman untuk diproses. passive
memberitahu penyemak imbas bahawa anda tidak mahu menyekat kelakuan lalai acara. native
membenarkan komponen mendengar peristiwa asli unsur akar seperti html
teg terbina dalam Jika tidak, menggunakan v-on
pada komponen hanya akan mendengar acara tersuai.
Pengubah suai butang tetikus left
Klik kiri. right
Klik kanan. middle
Klik tengah.
Pengubah nilai utama
Pengubah suai papan kekunci digunakan untuk mengubah suai acara papan kekunci (onkeyup
, onkeydown
), seperti berikut: keyCode
Terdapat banyak , tetapi vue
memberikan kami alias, yang dibahagikan kepada dua jenis berikut:
Konsep: SPA(Single-page application)
, iaitu aplikasi satu halaman, iaitu model aplikasi web atau tapak web yang berinteraksi dengan pengguna dengan menulis semula secara dinamik halaman semasa Interaktif, pendekatan ini mengelak daripada mengganggu pengalaman pengguna apabila bertukar antara halaman. Dalam SPA
, semua kod yang diperlukan (HTML, JavaScript dan CSS) diambil dengan memuatkan halaman tunggal, atau sumber yang sesuai dimuatkan secara dinamik dan ditambahkan pada halaman mengikut keperluan (biasanya sebagai tindak balas kepada tindakan pengguna). Halaman tidak dimuatkan semula pada bila-bila masa, dan juga tidak mengawal pemindahan ke halaman lain. Sebagai contoh, seperti secawan, ia mengandungi susu pada waktu pagi, kopi pada waktu tengah hari, dan teh pada sebelah petang Ia sentiasa mempunyai kandungan dan cawan itu tidak berubah. Perbezaan antara
SPA
dan MPA
: MPA(Muti-page application)
ialah aplikasi berbilang halaman. Dalam MPA
, setiap halaman ialah halaman utama dan adalah bebas Setiap kali halaman diakses, fail Html, CSS dan JS perlu dimuat semula dan fail awam dimuatkan atas permintaan.
|
SPA | MPA | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Komposisi | Satu halaman utama dan berbilang serpihan halaman | Berbilang halaman utama | |||||||||||||||||||||
url mod | mod cincang | mod sejarah | |||||||||||||||||||||
Pengoptimuman enjin carian SEO | Sukar untuk dilaksanakan, tetapi boleh Gunakan kaedah SSR untuk menambah baik | Mudah untuk dilaksanakan | |||||||||||||||||||||
Pemindahan data | Mudah | melalui url, kuki , localStorage Menunggu penghantaran | |||||||||||||||||||||
Penukaran halaman | Kelajuan pantas, pengalaman pengguna yang baik | Menukar sumber pemuatan, kelajuan perlahan, pengguna lemah pengalaman | td>|||||||||||||||||||||
Kos penyelenggaraan | Agak mudah | Agak kompleks |
Atas ialah kandungan terperinci [Disusun dan dikongsi] Beberapa soalan temu bual Vue biasa (dengan analisis jawapan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!