如何防止 withRouter 导致重新渲染 PureComponent?

Jos*_*hua 6 javascript reactjs react-router

我可以通过 调用链接history.push("/path")。要访问history,我必须使用withRouterwhich 将多个道具传递给组件。即使路径没有改变,match经过的withRouter也是不同的。这会导致PureComponent重新渲染。有没有办法解决这个问题?

例子:

class HomeButton extends PureComponent {
  onClick = () => {
    const { history } = this.props;
    history.push("/");
  }

  render() {
    return <Button onClick={this.onClick}/>
  }
}

export default withRouter(HomeButton);
Run Code Online (Sandbox Code Playgroud)

我使用了shallowEqualExplain来检查导致更新的道具。

hsz*_*hsz 1

Component如果PureComponent您不想更新,我建议您使用Button.

\n\n
\n

React.PureComponent\xe2\x80\x99s shouldComponentUpdate() 仅浅层比较对象。如果它们包含复杂的数据结构,则可能会产生更深层次差异的假阴性。

\n
\n\n

参考: https: //reactjs.org/docs/react-api.html#reactpurecomponent

\n