可插拔式 元件設計,領略元件開發的奧秘

2022-07-07 21:18:16 字數 2080 閱讀 5212

從乙個confirm元件開始,一步步寫乙個可插拔式的元件。

處理乙個正常的支付流程(比如支付寶購買**)

點選購買按鈕

如果風險等級不匹配則:彈確認框(confirm)

使用者確認風險後:彈出支付方式選擇彈窗(dialog)

選擇好支付方式後:彈窗呼叫指紋驗證(dialog)

如果關閉指紋驗證:提示是否輸入密碼(dialog)

彈出輸入密碼的鍵盤(自定義鍵盤)

當然還有密碼加班

如果密碼輸入錯誤則彈出修改/重試提示(confirm)

...再次彈出鍵盤

大約6個彈窗...

首先嘗試以乙個平常的註冊元件實現

confirm通過v-model="isshow"切換展示,通過@onconfirmoncancel接收點選事件。

元件**

}}

使用**

內容部分
那麼用它來完成上面的需求吧。

openriskconfirm() ,

onriskcancel() ,

onriskconfirm() ,

openpaymelist()

// ... 巴拉巴拉

// ... 大約需要 3*6 = 18 個方法才能完成需求(其他請求類的還不算)

如果你能接受,但是:

**改起來會是乙個災難,因為就算業務**是你寫的,你一段時間後也不一定能記得流程,而且,**看起來沒有任何的連續性,只能乙個個方法看。

針對上面的業務流程,嘗試使用現在比較流行的的彈窗。

元件:更改接收方法位置,從props放到$data

}}}

註冊到全域性

import confirm from './confirm.vue'

export default

}).$mount($ele);

};vue.prototype.$confirm = portfoliomsg;}}

呼叫

this.$confirm(,

oncancel: () =>

})

哪啊麼用它完成上面的需求會如何?

this.$confirm(,

oncancel: () => )}}

})},

oncancel: () => })}

})},

oncancel: () =>

})

這樣看起來確實清晰了很多,**量也少了很多,不需要註冊全域性的元件可以通過在methods中封裝乙個方法實現,維護起來也方便了很多。但是:**地獄有木有?也只是稍微輕鬆一點,可不可以再優化一下呢?

ajax 的**地獄是通過promise實現的,那麼上面的元件**地獄是不是也可以通過promise實現呢?

import confirm from './confirm.vue'

export default

}).$mount($ele);

return new promise((resolve, reject) => )

};vue.prototype.$confirm = portfoliomsg;}}

使用一下

this.$confirm().then(res => ).catch(res => )
那麼**地獄的問題很輕鬆的就解決了,可讀性很高,中間新增刪除邏輯也變的特別方便,維護起來成本大大的降低了。具體**自己抽象一遍或許更好哦。

譯者寫了乙個 react + hooks 的 ui 庫,方便大家學習和使用,

react + hooks 專案實戰

分析哪些元件是「可熱插拔」的

在2 4 7環境下,使用可熱插拔硬體元件非常有利。所謂可熱插拔,是指元件能夠在不導 致任何系統停工的情況下,在系統執行時動態地將元件插入系統或者從系統中拔出的特點。不同的提供商允許不同的元件進行熱插拔,這些元件包括電源系統到 c p u之類的任何裝置,例如記憶體板 i o板 硬碟驅動器。熱插拔允許對...

我心中的核心元件(可插拔的AOP) 大話開篇及目錄

回到佔佔推薦部落格索引 我心中的核心元件,核心元件就是我認為在專案中比較常用的功能,如日誌,異常處理,訊息,郵件,佇列服務,排程,快取,持久化,分布式檔案儲存,nosql儲存,ioc容器,方法攔截等等。對於以上內容可以說即是乙個大餐,又是乙個挑戰,就讓我帶著大家去迎接這份挑戰吧,呵呵!aop即面向切...

vue的元件化開發(元件通訊,插槽,遞迴元件)

1.vue元件的通訊 包括子通父,父通子,兄弟通訊,祖代與後代通訊,vuex全域性狀態管理。1.1 父向子通訊 props屬性和refs屬性。1.1.1 props屬性 在子元件中 props age1 number,string 存在多種型別。在父元件中 1.1.2 refs屬性 通過this.r...