【发布时间】:2021-05-23 14:30:40
【问题描述】:
我一直在尝试通过在组件上使用 React.memo 来提高渲染性能。它可以正常工作,直到我在作为子项插入的集合中的每个组件上使用它为止。
我准备了零食HERE
要了解发生了什么,您需要打开控制台,因为显示了一些日志。 您会看到 WrapperMemo,它通常会渲染 Child 组件(它们也被包裹在一些辅助组件中以检查我稍后会解释的内容)。
当你按下第一个名为 SLICE MYNUMBERS 的按钮时,你会看到 React.memo 的名为 isWrapperEqual 的 isEqual 函数返回 true,但它仍然不会停止重新渲染 子组件。 但是,Wrapper 和所有其他辅助包装器组件 (ChildOk) 都不会被渲染!
当您单击任何 PRESS ME:[number] 按钮时,它会强制您重新渲染其他 子 组件,而只有一个正在被修改。
值得一提的是,当按下任何按钮时,TestCompMemo 永远不会重新渲染 - 这是正确的行为。
1) 对此有什么解释吗?
2) 有没有办法在集合中的每个组件上使用 React.memo 以仅渲染更改的组件(如 Wrapper 组件中所示)?
【问题讨论】:
-
不要沉迷于渲染 - 沉迷于会导致性能问题的渲染。 React 开箱即用是愚蠢的,在遇到可能解决的性能问题之前,不要费心玩
React.memo之类的东西(除非你只是为了教育目的而这样做)。 -
感谢您的提示。我正在处理组件层次结构中的渲染瓶颈。发生了太多渲染器,从而减慢了用户交互/动画的速度。我找到了解决方法,但很好奇是否可以按照问题中所述的其他方式完成。
标签: reactjs react-native react-memo