到目前为止,我很喜欢React,但是我的应用程序中有一部分(不幸的是一个关键部分)我已经打了一些打嗝。
当一个项目安装或刷新dom的更新时,我需要在继续之前对最终的HTML进行特定检查(例如,如果组件的dom节点溢出容器,我需要将其移动到下一个容器) 。
问题是shouldComponentUpdate
在所有人componentDidUpdate
之前都会被调用{{1}}。这意味着我必须等到所有组件刷新到dom之前,然后我遍历它们以便从上到下计算它们是否溢出它们的外部容器,如果是这样我需要更改一些东西up后导致所有组件被强制更新。
例如,如果我的父级有20个组件且第3个组件溢出,我必须等到所有20个组件都被刷新到dom才能将后17个组件移动到下一个容器,只需重复直到所有组件都装在里面他们的容器。
我希望发生的是第一个组件刷新,我检查它是否溢出,然后第二个组件刷新,然后我检查它是否溢出等...这将大大减少多少冲到dom 。
Reaact可以实现这一切吗?
如果您对此问题背后的原因感到好奇,可以看到this question
答案 0 :(得分:1)
不,不可能直接导致React在组件DOM刷新之间顺序调用shouldComponentUpdate
。事实上,通过刷新每次调用之间的所有DOM更改,这可能会对新的React代码经常实现的性能提升产生巨大的负面影响。
相反,我相信您需要转移到一个模型,其中容器组件在屏幕上或屏幕外迭代地呈现子组件,然后适当地布置子组件。父组件需要使用回调componentDidUpdate
来衡量子项呈现后的状态。然后,使用setState
例如,触发添加新子项,直到循环完成。最终,所有孩子都将被渲染。该技术应该相对快速地运行并且尽可能地隔离DOM和测量组件(而不是例如影响整个页面)。如果您可以将子项渲染到屏幕外组件/ DOM元素进行测量,则可能会稍快一些。实际上,如果您可以在一次通过中将所有孩子都移出屏幕进行测量,那么这可能是理想的。