前端面試 -Vue2系列
vue
1為啥用Vue?
1MVVM 數據的雙向綁定
2指令系統 不需要操作DOM
3組件化
2v-show和v-if、v-for
v-show 通過 display:none
隱藏元素,DOM
還在。不可以觸發組件的生命周期, 性能消耗 小
v-if 將 DOM
元素整個添加或刪除 ,可以觸發組件的生命周期, 性能消耗 大
v-for和v-if不建議一起使用?
v-for優先順序高一些所以,每次循環都會執行一次v-if判斷,會大大影響效率。
如果一定要一起使用可以使用template標籤包裹 裡邊寫v-if
3vue生命周期
BeforeCreate 實例初始化後被調用,此時this沒有,不能操作data和methods watch
Created函數 實例已經創建完成 ,可以訪問data等但是不能操作dom
Beforemounte mounted
BeforeUpdate Updated
beforeDestroy Destroy
activated deactivated keep-alive 快取的組件激活時/停用時
數據請求在created和mouted的區別? 都能拿到實例對象的屬性和方法 放在mounted
請求有可能導致頁面閃動(頁面dom
結構已經生成),但如果在頁面載入前完成則不會出現此情況建議:放在create
生命周期當中
4computed與watch區別
computed計算屬性,watch監視屬性。倆個都能監聽data里的數據變化,區別是
既能用 computed 實現又可以用 watch 監聽來實現的功能,推薦用 computed 。因為有快取。
特別的是watch可以做具體的業務邏輯非同步使用。
5組件中data為什麼是函數?
函數會 產生數據污染情況 。如果是對象,組件復用的話,一個地方的數據變化會影響到另一個。
因為對象屬於引用類型,倆個組件的實例指向的是同一個記憶體地址的數據。
6Vue set的使用
vue
對已經存在的對象後添加的屬性無法做響應式。需要用到Vue.set
方法,
特別的Vue
對數組的改變也無法監聽,需要用到數組的方法,來實現。
7Vue響應式原理
data變頁面變
通過object.defineProperty
方法的getter和setter,監聽data里的數據,變化會調用setter方法,重新生成DOM
頁面變data變
通過v-model(語法糖)原理:v-on綁定的input事件,將value值設置為事件觸發變化的值
<input type="text" :value='msg' @input='msg = $event.target.value'
8組件通訊
- 通過 props 傳遞
- 通過 $emit 觸發自定義事件
- 使用 ref
- EventBus
- $parent 或$root
- attrs 與 listeners
- Provide 與 Inject
- Vuex
9nextTick理解
因為vue
更新dom是一個非同步操作,並不是數據變化會馬上更新,會進入一個非同步隊列,等全部數據變化之後才渲染頁面。因此要基於新的DOM操作時,需要用到這個函數。
10插槽
讓父組件給子組件指定位置插入html結構,子組件利用solt決定位置。
特別的 作用域插槽是當數據在子組件(slot標籤)身上需要傳給父組件(template標籤slot-scope)。
11mixin混合
多個組件可以復用的 如data
、components
、methods
、created
、computed
等等 可以提取到混合函數里
局部混入:配置項mixins: [myMixin]
全局混入 Vue.mixin()
特別的 當組件存在與mixin
對象相同的選項的時候 ,會合併使用組件身上的優先,當有生命周期函數時會先執行混合函數,在執行組件身上的
12key原理
就是一個節點的唯一標識。在diff演算法中可以根據key,更準確, 更快的找到對應的vnode節點
13keep-alive實現
在路由中設置keepAlive
屬性判斷是否需要快取 , 使用keep-alive
標籤包裹router-view
14Vuex
集中式狀態管理