為什麼 React 推崇 HOC 和組合的方式,而不是繼承的方式來擴展組件?

React 組件本身是 class 的寫法,為什麼不直接用繼承的方式給組件添加行為,而推薦使用 HOC 和組合的方式?總感覺是 OOP 和 FP 混著用,有點彆扭。


OOP和FP並不矛盾,所以混著用沒毛病,很多基於FP思想的庫也需要OOP來搭建。

為什麼React推崇HOC和組合的方式,我的理解是React希望組件是按照最小可用的思想來進行封裝的,理想的說,就是一個組件只做一件的事情,且把它做好,DRY。在OOP原則,這叫單一職責原則。如果要對組件增強,首先應該先思路這個增強的組件需要用到哪些功能,這些功能由哪些組件提供,然後把這些組件組合起來

D => f(A, B, C)

D中A相關的功能交由D內部的A來負責,D中B相關的功能交由D內部的B來負責,D僅僅負責維護A,B,C的關係,另外也可以額外提供增加項,實現組件的增強。

繼承有什麼不好,注意,React只是推薦,但沒限制。其實用繼承來擴展組件也沒問題,而且也存在這樣的場景。比如:有一個按鈕組件,僅僅是對&

TAG:前端開發 | JavaScript | React |