链接非常慢,无法显示“大”组件

时间:2019-01-03 16:26:06

标签: reactjs react-router

我正在开发一个React应用,其中有一个页面,其中包含许多图形和大型列表组件,这需要一些时间来加载(取决于性能)。暂时可以,但是问题来自以下方面:

  • 在第一个渲染中,有一个API调用(应用范围内,因为不同的页面使用相同的数据)。读取API数据时,正在显示正在加载的微调器
  • 一旦获取数据,就由Redux管理状态,每个组件都从那里获取所需的内容(不再加载)。

我的问题是,当我通过链接(反应路由器)在页面之间导航时,单击链接后,页面会显示一段时间,菜单也会更新当前页面。在那个时间范围内,状态数据都没有改变,因此我认为PureComponent可以防止重新渲染,但是它不起作用。

有什么方法可以不重新渲染页面?我希望单击链接会立即看到之前已经加载的页面。

很抱歉,如果问题很明显,我在进行研究时会感到困惑,包括冷裂,延迟加载等,这似乎更多是关于初始加载而不是导航?

2 个答案:

答案 0 :(得分:1)

如果要装载的组件数据量很大,并且状态没有改变或影响重新渲染,则可以防止组件完全卸载。

如果您使用React-Router,则可以依靠setRouteLeaveHook。 如果卸载取决于条件渲染,则可以更轻松地完成,因为您可以通过各种方式隐藏组件,包括css display:none

答案 1 :(得分:1)

您可以通过多种方式完成此操作

第一个是不卸载组件,只用CSS和display: none隐藏它,但是如果您问我,那是一个很烂的解决方案,因为您仍然可以在DOM中拥有该组件。

您可以使用的另一种解决方案是Facebook团队的人在为React创建官方网站时使用的解决方案。将鼠标悬停在页面链接上后,发送请求以预取该页面的数据。因此,在用户点击之前,您就已经发送了请求。

您可以使用的另一种解决方案是缓存数据。如果您不担心使用较旧浏览器的用户稍等片刻即可再次加载该组件。您可以将组件的数据保留在localStorage中,然后在要安装组件时,检查数据是否已经在localStorage中,如果存在,则只渲染该组件,否则,只需获取数据再次。

第一个和第二个选项的组合将使您的组件几乎总是可以立即渲染。