[英]How do you properly use React.memo w/ event handler props from HOC?
我在这里创建了一个非常简单的例子..
https://codesandbox.io/s/react-memo-with-function-props-09fgyo
如您所见, ComponentB
的渲染次数与ComponentB
一样多......即使它被包裹在memo
中并且没有接收counter
作为道具。
如果您在它自己的页面 ( https://09fgyo.csb.app/ ) 中打开该应用程序,然后使用 React DevTools 分析该页面,您会看到它报告它的渲染原因是因为onClick
发生了变化 (见截图)
所以..我知道发生这种情况的原因是因为每当 HOC 的 state 发生变化时,它都会重新渲染自己,并在这样做时创建一个新的handleButtonClick
因为它是一个箭头 function。所以 React 看着它说,“哎呀。 .这是一个新的 function,重新渲染ComponentB
!”
我的问题是.. 解决此类性能问题的最佳模式是什么?
我的意思是..我想我可以将setCounter
传递给CompnentB
,但这看起来很恶心.. 将 HOC 和它的 state 紧密耦合到ComponentB
。 (更新:现在我考虑了一下,也不能那样做,因为我也必须向下传递counter
才能计算增量,而且由于它正在改变,它也会导致重新渲染……呃。)
我真的很茫然..有人有什么想法吗?
您可以使用useCallback
挂钩来包装您传递给孩子的 function。
如果useCallback
数组依赖项没有变化,它将记忆 function 并使用缓存而不是重新创建 function。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.