如何缓存或防止重新渲染大型试剂组件



我有一个试剂单页应用程序。在根组件中,我有一个根据路由渲染组件的路由调度程序。像这样:

(defn page []
[(get component-lookup @current-page-name)])

我有一个列表页面和一个详细信息页面,用户经常在其中来回切换。

问题是,在这两个页面之间切换会破坏并重新创建整个页面的组件。这会明显减慢页面过渡速度,尤其是在移动设备中。相比之下,从一个详细信息页面切换到另一个详细信息页面非常快,因为 react 认为只需要重新渲染几个组件。

我第一次尝试优化是始终呈现两个页面,但在它们不可见时添加display:none。这加快了页面转换速度,但改变了生命周期方法的含义。例如,component-did-mount会执行,但组件不可见,我无法更新其滚动位置。

有没有更好的方法可以做到这一点?也许可以卸载组件树,将其与其子组件和状态/虚拟dom一起保存,以便以后使用新道具重新挂载?

我认为你无法在没有分叉反应的情况下做到这一点。 生命周期本质上与虚拟dom的修改有关 - 这是它们存在的全部意义。

有点令人惊讶的是,仅仅渲染 DOM 元素太慢了,除非你的页面有数千个 dom 元素或大量媒体。 您在安装过程中做什么? 如果它是计算密集型的,我会看看你是否可以分离出该逻辑并缓存它,以便它是一个轻量级的切换组件的过程。

最新更新