tsc*_*zle 8 javascript lodash reactjs
React在这个页面上讨论了性能,你可以使用浅等式并避免变异对象,这样组件只需要检查引用以查看props或状态是否发生了变化.
我实际上想知道相反的情况:是否有可能让相等性检查使用深度相等并忽略对象引用的变化(只要它们的内容不变)?
原因是,我有一个库,它返回一些内部变量的克隆版本,并且为了查看这些变量的更新,我需要重新询问该内部变量,从而获得一个全新的克隆.因此,我将通过引用获得完全不同的对象,但它们可能没有更改任何字段.但每当我请求这样的更新时,React认为一切都已经改变,因为所有引用都发生了变化,并且它重新呈现了许多不必要的东西.
当前解决方案:只要对象的字段不变,就将其放在一个组件中以阻止它呈现
shouldComponentUpdate(nextProps, nextState) {
return !_.isEqual(this.props, nextProps) || !_.isEqual(this.state, nextState);
}
Run Code Online (Sandbox Code Playgroud)
由于lodash的isEqual
相等性检查很深,但是我必须在每个想要这种行为的组件上执行此操作.我想知道是否有一个
或者上述方法最好.
我不建议您这样做,原因如下:
深度比较的代价是高昂的。因此,每次发生变化时,您都必须进行深入比较,然后进行渲染部分。我们最好让 React 来进行渲染,因为它就是为此而设计的。
至于在所有组件中处理它的情况。我们可以通过解构对象从而发送更小的道具来避免这个问题,现在反应可以处理优化的重新渲染。例如:
<Footer data={object} />
<Footer title={object.title} copyright={object.copyright}/>
我希望这有帮助!
归档时间: |
|
查看次数: |
2990 次 |
最近记录: |