切换链接时防止react-router重新创建组件

IT技术 reactjs react-router
2021-05-02 13:47:21

我在顶层有许多导航链接,当您在链接之间切换时,它们可以切换页面级别的组件。某些页面具有创建成本高昂的复杂网格组件。我注意到每次切换页面时 react-router 都会构造组件。有没有办法缓存传递到路由中的组件?,即 PositionsPage

<Route path="/positions" component={PositionsPage} />

2个回答

这是 React 整体(而不仅仅是react-router)的一个非常重要的性能考虑因素

默认情况下,React 会为props或 中的任何更改重新呈现完整的 DOM 树state

这是高级性能React 文档建议的技术摘要

使用生产版本

注意:组件的正确性是自动处理的。没什么好担心的。

这应该相当简单。以下webpack.config.js插件部分片段应确保NODE_ENV变量到达 React 源代码。

  ...
  plugins: [
    new CommonsChunkPlugin('bundle.js'),
    new webpack.DefinePlugin({
      'process.env': {
        'NODE_ENV': JSON.stringify(process.env.NODE_ENV)
      }
    })
  ]
  ...

现在只需确保NODE_ENV=production webpack -p.

这可确保propTypes跳过所有这些警告/错误和检查。

避免协调 DOM

警告:您必须处理所有可能的条件矩阵(如果需要)propsstate确保您不会弄乱渲染的正确性。

这是必须实现的回调签名。每当 anystatepropvalue 更改时都会调用它

shouldComponentUpdate: function(nextProps, nextState) {
  // @TODO your logic here
  // return true to update, false otherwise
  return true;
}

请记住,React 会经常调用此函数,因此实现必须很快。

您可以将昂贵的组件合二为一,只需使用 css 样式隐藏不需要的部分。