Mixin
之间存在隐式依赖(Mixin
经常依赖组件的特定⽅法,但在定义组件时并不知道这种依赖关系)Mixin
之间可能产⽣冲突(⽐如定义了相同的state
字段)Mixin
倾向于增加更多状态,这降低了应⽤的可预测性(The more state in your application, the harder it is to reason about it.),导致复杂度剧增Mixin
的扩展⾏为,及其之间的相互影响state
字段不敢轻易删改,因为难以确定有没有Mixin
依赖它Mixin
也难以维护,因为Mixin
逻辑最后会被打平合并到⼀起,很难搞清楚⼀个Mixin
的输⼊输出HOC
通过外层组件通过Props
影响内层组件的状态,⽽不是直接改变其State
不存在冲突和互相⼲扰,这就降低了 耦合度Mixin
的打平+合并,HOC
具有天然的层级结构(组件树结构),这⼜降低了复杂度HOC
⽆法从外部访问⼦组件的State
因此⽆法通过shouldComponentUpdate
滤掉不必要的更新,React
在⽀持ES6 Class
之后提供了React.PureComponent
来解决这个问题Ref
传递问题: Ref
被隔断,后来的React.forwardRef
来解决这个问题Wrapper Hell
:HOC
可能出现多层包裹组件的情况,多层抽象同样增加了复杂度和理解成本HOC
相当于在原有组件外层再包装⼀个组件,你压根不知道外层的包装是啥,对于你是⿊盒HOC
的缺点Render Props
都可以解决HOC
使⽤只需要借助装饰器语法通常⼀⾏代码就可以进⾏复⽤,Render Props
⽆法做到如此简单Render Props
虽然摆脱了组件多层嵌套的问题,但是转化为了函数回调的嵌套React Hooks
解决了HOC
和Render Props
的嵌套问题,更加简洁React Hooks
可以更⽅便地把 UI
和状态分离,做到更彻底的解耦Hooks
中可以引⽤另外的 Hooks
形成新的Hooks
,组合变化万千React Hooks
为函数组件⽽⽣,从⽽解决了类组件的⼏⼤问题:
this
指向容易错误Functional Component
与Class Component
之间的困惑)PureComponent
、React.memo
浅⽐较的性能优化效果(为了取最新的props
和state
,每次render()
都要重新创建事件处函数)state
、props
值React.memo
并不能完全替代shouldComponentUpdate
(因为拿不到state change
,只针对 props change
)版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。