对我的应用程序中的所有组件使用shouldComponentUpdate是一个好主意吗?

时间:2016-11-17 08:22:28

标签: reactjs

LoDash有精彩的method // getting twitter user profile details $twt_id = $data->id; //twitter user id $twt_email = $data->email; //twitter user email。使用是否是个好主意:

_.isEqual

我的应用中的所有组件?如果不是,为什么?

2 个答案:

答案 0 :(得分:2)

使用shouldComponentUpdate的唯一原因是,当您同时使用非常慢的render方法并且非常频繁地设置“{1}}新的'实际上不会改变渲染结果的状态或道具。

对于大多数应用来说,情况并非如此。所以一般来说没有,你就是在浪费时间

答案 1 :(得分:2)

最有可能,没有。尽管组件可能正在重新渲染,但这并不一定意味着将对DOM进行更新。 React在幕后进行了一些比较,因此仅在DOM实际需要更改时才更新DOM(有关此here的更多信息)。

此外,LoDash的isEqual方法进行了深层比较,这意味着它会遍历对象或数组(或给出的对象),并检查每个子对象和每个子对象的属性该元素的子元素(依此类推)到另一个值的子元素。对于小物体,这不会花费很长时间,但是当物体变大时,这可能会非常耗费时间。

即使您通过isEqual方法可以快速进行比较,也可能有一种更有效的处理方法。通常,组件的渲染方法将仅花费几毫秒,并且如上所述,仅当实际有所不同时,DOM才会更新。如果您使用异常昂贵的渲染方法,则可能需要使用Pure Component。纯组件会进行较浅的道具比较,而不会递归到子对象的每个对象中。这样,如果道具 look 相同,则可以跳过渲染功能。请注意,如果道具中有嵌套属性,则纯组件将不会捕获它们,并且组件也不会重新渲染。

通常,如果要延迟渲染直到道具包含某些值(请考虑shouldComponentUpdate),通常只想使用this.props.someValue && this.props.someOtherValue,这在从服务器获取数据并且想等到拥有所有组件来渲染组件。另一个可能要使用shouldComponentUpdate的时间是在呈现项目列表时。如果其中一个子代更改并且整个列表需要重新渲染,则可以通过检查渲染所需的道具来模拟纯组件,否则可以跳过渲染。还有 个其他用例,但它们通常是唯一的,您可能会知道何时应该使用shouldComponentUpdate

最后,使用shouldComponentUpdate通常是性能优化。如果您的React应用程序没有出现性能问题,则可能不需要使用它。