React-loadable 警告文本内容不匹配

React-loadable warning text content did not match

我使用 react-loadable 来动态加载 JS 模块。我还使用服务器端呈现,它已设置并适用于 react-loadable。然而,在客户端,似乎有问题,因为当我加载页面时,控制台中出现警告:

Warning: Text content did not match. Server: "Choose a name and enter passwordNamePasswordLogin" Client: "Loading..."

我在客户端使用preloadReady,应该可以避免这个错误。

我的 index.jsx 看起来像这样:

import { preloadReady } from 'react-loadable';

window.addEventListener('load', async () => {    
  await preloadReady();

  hydrate(
    <App />,
    document.getElementById('root')
  );
});

包版本:

编辑:

所以我意识到,react-loadable 的服务器端部分实际上不起作用,因为它无法获取要包含的捆绑包列表。原因是 Loadable.Capture 没有触发 report 回调,因此 modules 数组将为空。

事实证明我犯了一个非常基本的错误,那就是我试图在定义 React 应用程序之后但在渲染之前在服务器端使用 getBundles。所以很明显 report 回调没有被调用,因为它是在渲染时调用的。在我更改代码以获取 after 渲染后的包后,它工作得很好(虽然我仍然有包重复的问题,但我可以轻松地过滤它)。

如果 András 的解决方案不能解决问题。然后在您提供的 .html 文件中,确保块的脚本在 vendor 和 main bundle 之前可用。因此,在 vendor 和 main JS 之前重新排序 chunk JS。

<script src="chunk.js" defer></script>
<script src="vendor.js" defer></script>
<script src="main.js" defer></script>