React可加载导入连接组件

时间:2018-01-30 16:08:27

标签: reactjs asynchronous react-redux connect react-loadable

我试图使用ServerSide渲染进行反应加载工作。我有一个非常大的应用程序使用多个HOC connect组件,添加路由器等。

组件似乎没问题,而是通过react-redux或其他HOC连接的智能组件。 react-loadable似乎并不像单独的模块和.json中创建的undefined一样。

正确加载 dumb 组件的示例:

"common/HeaderTitle": [
    {
      "id": 667,
      "name": "./src/app/components/common/HeaderTitle.jsx",
      "file": "0.650d44243e1a15fa7627.js"
    },
    {
      "id": 667,
      "name": "./src/app/components/common/HeaderTitle.jsx",
      "file": "0.650d44243e1a15fa7627.js.map"
    },
    ...
],

无法加载智能组件的示例:

"undefined": [
    {
      "id": 626,
      "name": "./src/app/components/modules/Home/index.jsx",
      "file": "0.650d44243e1a15fa7627.js"
    },
    ...
],

我的服务器的html渲染如下所示。这里的所有内容都是从官方文档中复制的:

app.use((req, res) => {
    const modules = [];

    const html = SSR ? renderToString(
        <Provider store={store}>
            <StaticRouter location={req.url} context={{}}>
                <Loadable.Capture report={moduleName => modules.push(moduleName)}>
                    <App />
                </Loadable.Capture>
            </StaticRouter>
        </Provider>,
    ) : ' ';

    console.log('modules', modules);
    const bundles = getBundles(stats, modules);
    console.log('bundles', bundles);

    res.status(200).send(renderFullPage({ html, bundles }));
});

按预期记录哪些日志:

modules [ './modules/Home' ]
bundles [ undefined ]
TypeError: Cannot read property 'file' of undefined

这真让我疯狂。包看起来真的很好,我想用它。但我无法找到关于此类问题的任何内容,而且还有一个关于Github的问题部分。

对任何建议或帮助持开放态度。提前谢谢。

1 个答案:

答案 0 :(得分:1)

只是一个疯狂的猜测,但我认为它与您导入index.js的事实有关,而且反应可加载并没有在Loadable.Capture中提取这一点。或者wepback插件没有在react-loadable.json文件中创建正确的映射。

我在生产应用程序中使用的技巧(包括react-router,redux,react-loadable)是使用webpack命名的块:

const AsyncComponent = Loadable({
    loader: () => import(/* webpackChunkName: "myNamedChunk" */ './SomeComponent'),
    modules: ['myNamedChunk']
});

通过这种方式,您可以控制模块名称并明确告知反应可加载的内容。

我还写了一篇关于如何在create-react-app项目中实现这一目标的文章:https://medium.com/bucharestjs/upgrading-a-create-react-app-project-to-a-ssr-code-splitting-setup-9da57df2040a