Vue.js 元件複用和擴充套件之道
阿新 • • 發佈:2020-06-30
軟體程式設計有一個重要的原則是 D.R.Y(Don't Repeat Yourself),講的是儘量複用程式碼和邏輯,減少重複。元件擴充套件可以避免重複程式碼,更易於快速開發和維護。那麼,擴充套件 Vue 元件的最佳方法是什麼?
Vue 提供了不少 API 和模式來支援元件複用和擴充套件,你可以根據自己的目的和偏好來選擇。
本文介紹幾種比較常見的方法和模式,希望對你有所幫助。
* * *
## 擴充套件元件是否必要
要知道,所有的元件擴充套件方法都會增加複雜性和額外程式碼,有時候還會增加效能消耗。
因此,在決定擴充套件元件之前,最好先看看有沒有其他更簡單的設計模式能完成目標。
下面幾種元件設計模式通常足夠替代擴充套件元件了:
* `props` 配合模板邏輯
* slot 插槽
* JavaScript 工具函式
#### `props` 配合模板邏輯
最簡單的方法是通過`props`結合模板條件渲染,來實現元件的多功能。
比如通過 `type` 屬性:
*MyVersatileComponent.vue*
```
...
...
```
使用元件的時候傳不同的`type`值就能實現不同的結果。
```
// *ParentComponent.vue*
```
如果出現下面兩種情況,就說明這種模式不適用了,或者用法不對:
1. 元件組合模式把狀態和邏輯分解成原子部分,從而讓應用具備可擴充套件性。如果元件記憶體在大量條件判斷,可讀性和可維護性就會變差。
2. props 和模板邏輯的本意是讓元件動態化,但是也存在執行時資源消耗。如果你利用這種機制在執行時解決程式碼組合問題,那是一種反模式。
#### slot(插槽)
另一種可避免元件擴充套件的方式是利用 [slots(插槽)](https://vuejs.org/v2/guide/components-slots.html),就是讓父元件在子元件內設定自定義內容。
```
// *MyVersatileComponent.vue*
Common markup
```
```
// *ParentComponent.vue*
```
渲染結果:
```
Common markup