谢谢你的问题,两个月前对我很有帮助。
memo
function 接受一个组件和一个function
将被调用的组件来决定 React 是否需要重新渲染,如果函数返回true
组件将不会重新渲染,如果函数返回false
,那么 props 现在不同,Reactre-render
会这样做你的组件。
现在:要pathname
正确访问function
传递给的memo
thenmemo
应该用withRouter
而不是相反的方式包装,withRouter
包装一个组件(它不知道它是否是组件的记忆版本,它只是包装它)并将其传递给路由道具。
作为第二个参数传递的 to 现在可以访问andfunction
道具并像我们之前讨论的那样进行比较(其中每个道具作为您想要的完整路由细节)。memo
previous
new
import { memo } from 'react';
function propsAreEqualBasedOnPathname(prevProps, nextProps) {
return prevProps.location.pathname == nextProps.location.pathname;
}
withRouter(memo(MyComponent), propsAreEqualBasedOnPathname);
最后,要特别注意如何在内部进行比较,compare function
因为一些错误可能会阻止您的组件在未来永远重新渲染。
我发现使用memo
withwithRouter
对改进performance
React 组件非常重要,特别是如果组件是一个充满细节和获取逻辑的页面,这可能会花费您一些时间来渲染,因此您节省的每次重新渲染都会提高页面性能。