我正在开发一个React应用,其中有一个页面,其中包含许多图形和大型列表组件,这需要一些时间来加载(取决于性能)。暂时可以,但是问题来自以下方面:
我的问题是,当我通过链接(反应路由器)在页面之间导航时,单击链接后,页面会显示一段时间,菜单也会更新当前页面。在那个时间范围内,状态数据都没有改变,因此我认为PureComponent可以防止重新渲染,但是它不起作用。
有什么方法可以不重新渲染页面?我希望单击链接会立即看到之前已经加载的页面。
很抱歉,如果问题很明显,我在进行研究时会感到困惑,包括冷裂,延迟加载等,这似乎更多是关于初始加载而不是导航?
答案 0 :(得分:1)
如果要装载的组件数据量很大,并且状态没有改变或影响重新渲染,则可以防止组件完全卸载。
如果您使用React-Router,则可以依靠setRouteLeaveHook
。
如果卸载取决于条件渲染,则可以更轻松地完成,因为您可以通过各种方式隐藏组件,包括css display:none
答案 1 :(得分:1)
您可以通过多种方式完成此操作
第一个是不卸载组件,只用CSS和display: none
隐藏它,但是如果您问我,那是一个很烂的解决方案,因为您仍然可以在DOM中拥有该组件。
您可以使用的另一种解决方案是Facebook团队的人在为React创建官方网站时使用的解决方案。将鼠标悬停在页面链接上后,发送请求以预取该页面的数据。因此,在用户点击之前,您就已经发送了请求。
您可以使用的另一种解决方案是缓存数据。如果您不担心使用较旧浏览器的用户稍等片刻即可再次加载该组件。您可以将组件的数据保留在localStorage
中,然后在要安装组件时,检查数据是否已经在localStorage中,如果存在,则只渲染该组件,否则,只需获取数据再次。
第一个和第二个选项的组合将使您的组件几乎总是可以立即渲染。