React类组件为什么要用组合不用继承?函数式组件呢?函数式组件为什么不用继承呢?
组合更适合react的风格,因为react是基于组件的。而且整个react社区也是以组合为主,与社区保持统一的好处很多。
当然,继承也是可以用,但是在没有绝对的好处的情况下用继承显然不是个明智的选择。
官方有专门的一个章节来讨论这个问题
https://zh-hans.reactjs.org/docs/composition-vs-inheritance.html
为什么React推崇HOC和组合的方式,是React希望组件是按照最小可用的思想来进行封装的,理想的说,就是一个组件只做一件的事情,且把它做好,DRY。在OOP原则,这叫单一职责原则。如果要对组件增强,首先应该先思路这个增强的组件需要用到哪些功能,这些功能由哪些组件提供,然后把这些组件组合起来。
继承有什么不好,注意,React只是推荐,但没限制。其实用继承来扩展组件也没问题,而且也存在这样的场景。但是,用继承的方式扩展前,要先思考,新组件是否与被继承的组件是不是同一类型的,同一类职责的。如果是,可以继承,如果不是,那么就用组合。
继承会带来什么问题,过渡使用继承,虽然给编码带来便利,但容易导致代码失控,组件膨胀,降低组件的复用性。
请看这个:https://www.zhihu.com/question/263350526?utm_id=0
https://blog.csdn.net/qq_41914181/article/details/111146653
我的理解是React希望组件是按照最小可用的思想来进行封装的,理想的说,就是一个组件只做一件的事情,且把它做好,DRY。在OOP原则,这叫单一职责原则。如果要对组件增强,首先应该先思路这个增强的组件需要用到哪些功能,这些功能由哪些组件提供,然后把这些组件组合起来
D => f(A, B, C)
D中A相关的功能交由D内部的A来负责,D中B相关的功能交由D内部的B来负责,D仅仅负责维护A,B,C的关系,另外也可以额外提供增加项,实现组件的增强。
继承有什么不好,注意,React只是推荐,但没限制。其实用继承来扩展组件也没问题,而且也存在这样的场景。比如:有一个按钮组件,仅仅是对进行一个包装,我们且叫它Button,可是,按照产品需求,很多地方的按钮都是带着一个icon的,我们需要提供一个IconButton。这是时候,就可以通过继承来扩展,同时组合另外一个独立的组件,我们且叫它Icon,显示icon的功能交给Icon组件来做,原来按钮的功能继续延续着。对于这种同类型组件的扩展,我认为用继承的方式是没关系的,灵活性,复用性还在。
React只是推荐组件,但没限制.
React希望组件是按照最小可用的思想来进行封装的,理想的说,就是一个组件只做一件的事情,且把它做好