Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 理解React渲染_Performance_Reactjs_Render - Fatal编程技术网

Performance 理解React渲染

Performance 理解React渲染,performance,reactjs,render,Performance,Reactjs,Render,似乎React组件在其父组件渲染时总是运行其渲染方法,即使子组件的状态或道具没有更改,即使子组件没有状态或道具 这应该是吗?这里面有没有低效的地方?将子组件切换到PureComponent可以解决这一问题,并且子组件不会重新加载。我应该更喜欢纯组件而不是常规组件吗?如果您想要控制组件重新加载的原因,那么您应该使用shouldComponentUpdate,它可以用于所有react组件,除非它们是无状态功能组件。PureComponent基本上自动使用shouldComponentUpdate,并

似乎React组件在其父组件渲染时总是运行其渲染方法,即使子组件的状态或道具没有更改,即使子组件没有状态或道具


这应该是吗?这里面有没有低效的地方?将子组件切换到PureComponent可以解决这一问题,并且子组件不会重新加载。我应该更喜欢纯组件而不是常规组件吗?

如果您想要控制组件重新加载的原因,那么您应该使用
shouldComponentUpdate
,它可以用于所有react组件,除非它们是无状态功能组件。PureComponent基本上自动使用
shouldComponentUpdate
,并对过去和当前的道具/状态进行粗略检查,如果有更改,它将重新发布

有时,您可能正在处理更复杂的数据结构,并希望自己控制
shouldComponentUpdate
,在这种情况下,只需遵循此处的生命周期方法说明即可

这也是PureComponent的信息


PureComponents更容易出现错误。react文档的一般建议是,在任何地方都使用组件,只有在解决实际性能问题时,并且只有在其使用确实提高了性能时,才使用PureComponent。我现在找不到源代码的链接。在PureComponent文档中:“如果您的React组件的render()函数在相同的道具和状态下呈现相同的结果,您可以在某些情况下使用React.PureComponent来提高性能。”我感兴趣的是“If”。。。渲染函数是否应该在一切都相同的情况下运行?或者,当使用常规组件时,没有状态或道具的哑组件是否永远不会重新渲染。常规组件如何决定何时渲染?父组件中的任何更改都会先渲染子组件,然后再渲染父组件。若您认为父组件状态或道具不应影响子组件,请使用shouldComponentUpdate函数。如果您不需要组件的本地状态,纯组件是有用的。谢谢,我了解该功能,我只是想了解我是否应该费心控制重新渲染?我是否应该尝试最小化不需要重新提交的组件的重新提交?这取决于您的用例和应用程序。如果性能不是问题,并且您没有非常复杂的UI,那么花时间投资可能不值得。如果您有一个复杂的UI,其中的组件可能会呈现大量DOM元素,那么花些时间和防止无用的重新渲染是绝对值得的。在我工作的地方,我们只在有问题的组件上使用它,不花时间在较小的组件上实现它,但我相信还有其他人将它应用到所有事情上,这取决于您的用例谢谢,这很有帮助。我刚刚阅读了一些文档,它们澄清了render方法实际上并不意味着实际DOM的重新渲染。React仍然会将渲染的虚拟DOM元素与真实对象进行比较,以确定是否需要在UI中渲染。