阻止更新:对路由器和Redux进行反应

时间:2018-10-23 12:55:29

标签: javascript reactjs redux

路由器docs上有关何时将withRouter与redux一起使用的一些信息。但是,我发现它们并不十分清楚。

例如,文档说何时使用withRouter

  
      
  1. 该组件通过connect()(Comp)连接到redux。
  2.   
  3. 该组件不是“路由组件”,这意味着它的呈现方式不是这样:
  4.   

有些不清楚的事情是:

  • 首先是与AND连接的第一和第二点?例如第一次和第二次发生时组件不会更新吗? (还是OR?)
  • 在第一种情况下,是否意味着当我有connect(mapStateToProps)(Comp)时不使用withRouter很好吗?
  • 我完全不清楚第二点。这是否意味着我们应该将withRouter应用于不是“路由组件”的任何组件(是否由connect编辑?)?

更新:经过一些exploration之后,看来路由器4.4版本不再是问题。

1 个答案:

答案 0 :(得分:1)

  

在第一种情况下,这意味着当我拥有connect(mapStateToProps)(Comp)时,最好不要与Router一起使用吗?

connect()(Comp)表示它是连接的组件,并不意味着withRouter对于诸如connect之类的其他connect(mapStateToProps)(Comp)自变量可能是不必要的。 The documentation也提到了这一点:

// before
export default connect(mapStateToProps)(Something)

// after
import { withRouter } from 'react-router-dom'
export default withRouter(connect(mapStateToProps)(Something))
  

这是否意味着我们应该将withRouter应用于不是“路由组件”的任何组件(是否已连接?)?

如果不是路由组件,则应将withRouter应用于组件,并且我们希望在位置更新时对其进行更新,即,它以某种方式使用route props。一个流行的示例是导航菜单,其中突出显示了活动项,它不是路线组件,但需要知道当前路线。

  

还是为什么不将withRouter附加到任何连接的组件上,它不能涵盖所有情况?

这将为可能不需要它们的组件(因为它们不使用路由道具)提供有关路由器事件的不必要更新。