防止子组件在redux状态更改时重新呈现

时间:2019-03-27 21:45:00

标签: reactjs redux

我的根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));
  };

如果每次商店中这些值更改时,我都可以使子组件停止渲染,这将为我的应用程序整体带来相当大的性能提升。感谢您的协助!

0 个答案:

没有答案