開發(fā)通用組件是很基礎(chǔ)且重要的工作,通用組件必須具備高性能贝或、低耦合的特性
一吼过、數(shù)據(jù)從父組件傳入
為了解耦,子組件本身就不能生成數(shù)據(jù)扇谣。即使生成了,也只能在組件內(nèi)部運作鸯绿,不能傳遞出去瓶蝴。
父對子傳參劲绪,就需要用到props蝎宇,但是通用組件的的應(yīng)用場景比較復(fù)雜,對 props 傳遞的參數(shù)應(yīng)該添加一些驗證規(guī)則
二凉唐、在父組件處理事件
在通用組件中读整,通常會需要有各種事件强品,
比如復(fù)選框的 change 事件,或者組件中某個按鈕的 click 事件
這些事件的處理方法應(yīng)當(dāng)盡量放到父組件中雕薪,通用組件本身只作為一個中轉(zhuǎn)
三、記得留一個 slot
一個通用組件纲熏,往往不能夠完美的適應(yīng)所有應(yīng)用場景
所以在封裝組件的時候奶赠,只需要完成組件 80% 的功能苹丸,剩下的 20% 讓父組件通過 solt 解決
四赘理、不要依賴 Vuex
父子組件之間是通過 props 和 自定義事件 來傳參,非父子組件通常會采用 Vuex 傳參
但是 Vuex 的設(shè)計初衷是用來管理組件狀態(tài),雖然可以用來傳參,但并不推薦
因為 Vuex 類似于一個全局變量银受,會一直占用內(nèi)存
在寫入數(shù)據(jù)龐大的 state 的時候赖淤,就會產(chǎn)生內(nèi)存泄露
五确丢、合理運用 scoped 編寫 CSS
在編寫組件的時候诸典,可以在 <style> 標(biāo)簽中添加 scoped,讓標(biāo)簽中的樣式只對當(dāng)前組件生效
但是一味的使用 scoped互墓,肯定會產(chǎn)生大量的重復(fù)代碼
所以在開發(fā)的時候豆挽,應(yīng)該避免在組件中寫樣式
當(dāng)全局樣式寫好之后,再針對每個組件,通過 scoped 屬性添加組件樣式