1.v-if和v-show的區別
v-if和v-show都是Vue中用于條件渲染的指令,但它們的實現機制和適用場景有所不同:
v-if是真正的條件渲染,在條件切換時會銷毀和重建DOM元素,適合運行時條件變化不頻繁的場景;
v-show只是通過CSS的display屬性控制顯示/隱藏,元素始終存在于DOM中,適合需要頻繁切換的場景;
從性能角度考慮,頻繁切換時使用v-show,減少DOM操作開銷;條件很少變化時使用v-if,減少初始渲染開銷。
在實際項目中,我會根據具體場景選擇:比如選項卡內容切換用v-show,權限控制顯示/隱藏用v-if。
2.es6新特性:
(1)const 與 let 變量
(2)模板字符串——``
(3)字符串新增的一些方法
includes——查看字符串中是否包含某些字符
(4)箭頭函數
(5)拓展運算符——...
(6)數組新增方法
for of——遍歷數字下標的數組或類數組對象
find —— 會將數組的每一個元素放入到函數中進行迭代處理 將第一個滿足條件的值取出來
findIndex ——會將數組的每一個元素放入到函數中進行迭代處理 將第一個滿足條件的值的鍵取出來
(7)class類
(8)getter 是一種獲得屬性值的方法,setter是一種設置屬性值的方法。
一定注意,他們針對的是類的屬性,并不是方法。
(9)promise——表示一個尚未完成但是最終會完成的操作的對象。主要有三種狀態: pengding: 初始狀態,既不是成功也不是失敗 Fullfilled: 表示操作執行成功 Rejected: 表示操作失敗
promise中的一系列方法: then: 注冊回調函數用于處理promise返回成功的結果 catch: 注冊回調函數用于處理promise失敗的結果 finally: 無論promise執行的結果是成功還是失敗,都會執行finally中的結果
promise還支持鏈式調用,可以連續的調用then,catch和finally promise.all()會等待所有的promise執行完畢后再去執行后續操作,如果有任何一個promise執行失敗都會拒絕并且會在catch中返回第一個被拒絕的原因
(10)Map/Set
Map: 是一種集合類型,可以用于存儲任意類型的鍵值對,與js中的普通的對象不同的是,Map中的鍵可以是任意類型的數據,甚至可以是對象。
Set: set也是一種集合類型,存儲唯一值,它與Map的區別在于Set中不存儲鍵,只存儲值
(11)Symbol 是一種新的原始數據類型,它主要用于創建唯一的鍵名,特別是在對象屬性和某些場景下的標識符上。Symbol 的設計目的是解決一些傳統鍵名(如字符串鍵名)可能帶來的問題,比如鍵名沖突等。多用于給元素創建屬性使用
3.銷毀組件需要用哪個生命周期
在Vue中,組件銷毀時會依次觸發beforeDestroy和destroyed兩個生命周期鉤子。beforeDestroy階段適合執行清理操作,如清除定時器、取消事件監聽等,此時組件實例仍然可用;destroyed階段表示組件已完全銷毀,所有綁定和子實例都已被移除。在Vue 3中它們分別更名為beforeUnmount和unmounted。
?
補充:生命周期
?
(1)vue2生命周期
beforeCreate 組件實例被創建之初,組件的屬性生效之前 created 組件實例已經完全創建,屬性也綁定,但真實 dom 還沒有生成,$el 還不可用 beforeMount 在掛載開始之前被調用:相關的 render 函數首次被調用 mounted el 被新創建的 vm.$el 替換,并掛載到實例上去之后調用該鉤子【可多次調用】 beforeUpdate 組件數據更新之前調用,發生在虛擬 DOM 打補丁之前,即在重新渲染之前進行最后的準備工作 updated 組件數據更新之后,重新渲染完成后。此階段表示Vue實例已經完成了數據更新,并已經重新渲染到DOM beforeDestory 組件銷毀前調用,此階段用于清理工作,如移除事件監聽器或取消定時器。 destoryed 組件銷毀后調用,此階段表示Vue實例已經完全銷毀,所有的事件監聽器和組件實例都已被移除。 activited keep-alive 專屬,組件被激活時調用 deadctivated keep-alive 專屬,組件被銷毀時調用
(2)vue3生命周期
setup() 始創建組件之前,在 beforeCreate 和 created 之前執行,創建的是 data 和 method onBeforeMount() 組件掛載到節點上之前執行的函數 onMounted() : 組件掛載完成后執行的函數 onBeforeUpdate() 組件更新之前執行的函數 onUpdated(): 組件更新完成之后執行的函數 onBeforeUnmount() 組件卸載之前執行的函數 onUnmounted(): 組件卸載完成后執行的函數 onActivated() 被包含在 中的組件,會多出兩個生命周期鉤子函數,被激活時執行; onDeactivated() 比如從 A 組件,切換到 B 組件,A 組件消失時執行; onErrorCaptured() 當捕獲一個來自子孫組件的異常時激活鉤子函數。
(3)uniapp生命周期
1、應用程序的生命周期方法:定義在根組件app.vue中
onLaunch() 應用程序啟動 onShow() 應用程序顯示 onHide() 應用程序隱藏
2、頁面的生命周期方法--仿微信小程序
onLoad() 頁面掛載完成 onShow() 頁面被顯示 onReady() 頁面可以交互 onHide() 頁面被隱藏 onUnload() 頁面被卸載
onPageScroll() 頁面發生滾動 onReachBottom() 頁面滾動觸底 onPullDownRefresh() 頁面下拉刷新
4.在 Vue 模板中循環遍歷數組對象時,如果要安全訪問可能不存在的嵌套屬性(如 child.name)
-
使用可選鏈操作符 (?.)(推薦)
<script setup> const items = [{ id: 1, name: '父項1', child: { name: '子項1' } },{ id: 2, name: '父項2' }, // 沒有child{ id: 3, name: '父項3', child: null } // child為null ] </script> ? <template><ul><li v-for="item in items" :key="item.id">{{ item.name }} - 子項: {{ item.child?.name || '無子項' }}</li></ul> </template>
-
使用 v-if 條件判斷
5.vue3當中ref和reactive的區別
"Vue3中ref和reactive都是創建響應式數據的API,但有以下關鍵區別:
ref適用于所有類型,需要通過.value訪問,而reactive僅適用于對象且直接訪問屬性;
ref在模板中自動解包,reactive保持原樣訪問;
ref可以重新賦值整個對象,reactive不能直接替換;
reactive解構會失去響應性,需要用toRefs轉換;
底層實現上ref使用getter/setter,reactive使用Proxy。
實際開發中,基本類型多用ref,復雜對象狀態多用reactive,也可以組合使用。"
6.在Vue中封裝Axios時添加請求頭參數
-
全局默認請求頭 - 在創建axios實例時通過
defaults.headers
設置,適用于所有請求共用的頭信息: -
請求攔截器添加 - 在
interceptors.request.use
中動態添加,適合需要運行時確定的頭信息如認證token: -
單個請求添加 - 在具體API調用時傳入headers,適用于特殊接口的特殊頭信息:
7.解決 img 標簽與 input 之間的神秘空隙問題
方法 1:修改 img 的 vertical-align
方法 2:設置父元素的 font-size 為 0
方法 3:使用 flex 布局(推薦)
方法 4:浮動布局
方法 5:負 margin 調整(應急方案)
8.Vuex和??Pinia?的區別
Vuex和Pinia都是Vue的狀態管理庫,但Pinia是更現代的解決方案,主要區別在于:
API設計:Pinia采用組合式API風格,比Vuex的選項式API更簡潔
類型支持:Pinia提供一流的TypeScript支持,無需額外配置
模塊系統:Pinia使用扁平化store設計,比Vuex的嵌套模塊更直觀
體積大小:Pinia比Vuex更輕量
架構簡化:Pinia合并了mutations和actions,減少了概念復雜度
9.在微信小程序開發中遇到回調報錯或未收到回調時,怎么解決?
1.先檢查基礎配置
-
確認小程序后臺的服務器域名配置好了
-
檢查微信支付/云開發等平臺的回調地址有沒有填錯
-
測試下網絡是不是通的
2.代碼里加保險
-
所有回調都加上錯誤處理,比如:
javascript
wx.request({success(){...},fail(){ // 記錄錯誤日志// 嘗試重新發送}
})
-
重要的操作(比如支付)會在前端做個定時檢查,如果5秒沒收到回調,就主動去查詢狀態
3.服務端做防護
-
防止重復處理(比如支付成功了但回調了多次)
-
加個日志系統,記錄每次回調的情況
4.上線后繼續觀察
-
看監控數據,如果發現某些回調經常失敗,就針對性優化
-
把常見問題的解決方法整理成文檔,方便團隊參考
10.promise當中then、catch、finally的區別
then: 注冊回調函數用于處理promise返回成功的結果 catch: 注冊回調函數用于處理promise失敗的結果 finally: 無論promise執行的結果是成功還是失敗,都會執行finally中的結果