我的根App组件中有一些方法可以跟踪用户在页面上的位置。一个跟踪滚动位置,方法是在用户滚动时将值保存在redux存储中(因此它会在滚动时不断更新redux存储),另一个跟踪用户光标所在的屏幕象限(更改时也会更新存储)。所有这些都在App组件中进行。为了防止不必要的重新渲染,我实现了shouldComponentUpdate
来比较这些值并返回false。这对于App组件本身非常有效,但是子组件仍会根据这些更改重新呈现。
子组件不会访问状态的这一特定部分,但是尽管如此,它仍会重新渲染。因此,我假设connect()
正在发生某些事情。
我尝试设置connect(mapStateToProps, null, null, {pure: true})
的选项,但这并没有任何改变。
这是我的App组件中的一种跟踪滚动的方法:
handleScroll = () => {
const { dispatch, scrollTop: stateScrollTop } = this.props;
let scrollDirection = 'bottom';
const scrollTop = window.pageYOffset;
if (stateScrollTop > scrollTop) {
scrollDirection = 'top';
}
dispatch(windowScroll(scrollTop, scrollDirection));
};
如果每次商店中这些值更改时,我都可以使子组件停止渲染,这将为我的应用程序整体带来相当大的性能提升。感谢您的协助!