2015-03-25 27 views
0

到目前为止,我很喜欢React,但是我的应用程序中有一部分(不幸是重要的一部分),我打了一下呃。在shouldComponentUpdate之后,但在下一个组件的ShouldComponentUpdate被调用之前,是否有可能更新组件?

当一个项目挂载或刷新dom的更新时,我需要在继续之前对最终化的HTML执行特定检查(例如,如果组件的dom节点溢出容器,我需要将其移动到下一个容器)。

与此问题是shouldComponentUpdate被称为所有他们之前有任何人componentDidUpdate。这意味着我必须等到所有组件刷新到dom,然后再遍历它们才能从上到下计算它们是否溢出了它们的外部容器,如果是这样,我需要更改一些东西,导致所有组件在那个人被迫更新。

例如,如果我的父项有20个组件并且第三个组件溢出,我必须等到20个组件全部刷新到dom之后再将后面的17个组件移动到下一个容器,然后重复,直到所有组件满足要求在他们的容器内。

我希望发生的第一个组件冲洗,我检查它是否溢出,然后第二个组件冲刷,然后我检查它是否溢出,等等......这将大大减少多少冲洗到DOM。

这是所有可能的反应吗?

如果你在好奇,为什么这背后的问题,你可以看到this question

回答

1

不,这不可能直接导致反应顺序组件DOM刷新之间的呼叫shouldComponentUpdate。实际上,这可能会大大地影响新React代码通常通过刷新每次调用之间的所有DOM更改而实现的性能提升。

相反,我相信你需要移动到一个模型中,一个容器组件迭代地在子屏幕上或屏幕上呈现子组件,然后适当地设置子组件。父组件需要使用回调componentDidUpdate来测量孩子渲染后的情况。然后,例如使用setState,触发添加新的子项,直到循环完成。最终,所有的孩子都会被渲染。这种技术应该运行得相对较快,并尽可能地隔离DOM和测量组件(而不是影响整个页面)。如果您可以将孩子渲染到屏幕外的组件/ DOM元素进行测量,则可能会稍微快一点。事实上,如果您可以让所有孩子在一次通过屏幕上进行测量,这可能是理想的。

相关问题