比照props需要耗费额外功能就不说了,下面想说说别的的
1.许多时分咱们为了代码可读性更好,也可能是为了方便,咱们会这样写代码
<Comp style={{color: 'red'}} onClick={() => func(params)}} />
显然不会去处处写useMemo和useCallback 不然也太丑了,这种状况把Comp改成纯组件底子杯水车薪,因为props的引证总会改变。
2. 假设某次状态变更,导致你期望以外的组件履行了render办法,而这个组件又是巨大粗笨的,那么首要应该思考的是,这个组件是否应该移到父组件层级?或者把state定义到子组件。因为这才是底子问题所在。通常一份特别粗笨的东西,是不应该和琐碎的小零件平起平坐的。应当有这样的管理认识。
3. render并没有那么糟糕,diff算法还会在最后登场去优化实在dom更新过程。
4. 有人做了功能测试,把一切的组件默认改成纯组件,在挨近一半的测试场景中都表现为负优化。(当然其实我是不太了解,props的浅比照真的这么耗费功能吗?有待研究,诚心很古怪。假设有10个props,那也只是相当于调用10次Object.is()办法而已,为什么会比履行render耗费更大?而且一般履行完render之后是需要去一个个dom节点做diff的,到后边比照的功能耗费岂不是更大?)
5. 重新思考父组件更新触发子组件render的行为,其实反而能避免一些bug。比方你传递了一个深层嵌套的目标给子组件运用,但运用了突变式修改值更改目标的属性,然后通过其他方式触发了父组件更新。那么问题来了,子组件是纯组件的话就不会被更新。或许你会说这是代码水平的问题,你突变式修改值了!但更重要的要素在于,这样的代码场景理论上会广泛存在,而只有真实去履行子组件render再去diff才能避免这样的问题。假设你是结构的开发者,你会作何取舍?想必答案会是相同的,仍是“忍痛”render吧!毕竟不是完全没有好处的。你不去render比照了,那好嘛,人们可能会开端痛斥react更新不够智能了。