版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
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)