React Loadable SSR并不总是为客户提供完整的捆绑软件清单,从而导致页面刷新

时间:2018-10-19 19:43:17

标签: reactjs code-splitting react-loadable react-ssr

最近几天,我一直在努力消除页面刷新。我的项目从create-react-app开始,然后我使用help来设置SSR和其他各种选项。当我开始遇到问题时,我将代码剥离并弹出。 Here is my code.您可以使用npm run build进行构建,并使用npm run serve启动SSR。访问http://localhost:3000/以查看结果。

我的应用程序中有两条路线:HomeAbout

转到/(主页)可按需要工作:react-loadable标识home包,为其注入一个<script>标签,然后将页面发送到门外。客户端加载所有捆绑包,并在没有闪存的情况下进行接管。

转到/ about会导致页面闪烁(请确保已从服务器加载页面以查看此信息)。我将moment-timezone的导入添加到了about组件中,并且webpack巧妙地将其移动到了自己的捆绑包中,与about捆绑包分开了。问题在于react-loadable仅看到它需要about捆绑包,而不需要包含moment-timezone的额外捆绑包。因此,在客户端,当React接手时,它会看到其缺少一个模块,将页面空白,加载包含缺少的模块的包,然后重新渲染(至少, 我认为就是这样。)

我想念什么?我正在使用React-Loadable自述文件中所述的babel和webpack插件。似乎React-Loadable足够聪明,可以深入到一个层次,看不到导入模块的依赖关系是什么,但是肯定不是这样吗?

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为react-loadableserver side rendering没有很好的实现。

但是好消息是,有一个附加组件,称为react-loadable-ssr-addon

在插件存储库中显示:

  

React Loadable SSR加载项是React Loadable的服务器端渲染加载项,可帮助您动态加载所有文件依赖项,例如分割的块,css等。

     

是的,我们还提供对SRI(子资源完整性)的支持。

因此,基本上,此插件可以处理与server side rendering的资产情况有关的所有内容,并产生与传统方法(客户端渲染)相同的行为。

这样,您的资产将被管理并自动加载到输出中,从而避免了您报告的错误。