Reactjs React可加载导入连接组件
我正在尝试使用服务器端渲染使react可加载。我有一个相当大的应用程序,使用多个HOC连接组件,添加路由器等 组件似乎运行正常,而是通过Reactjs React可加载导入连接组件,reactjs,asynchronous,react-redux,connect,react-loadable,Reactjs,Asynchronous,React Redux,Connect,React Loadable,我正在尝试使用服务器端渲染使react可加载。我有一个相当大的应用程序,使用多个HOC连接组件,添加路由器等 组件似乎运行正常,而是通过react redux或其他HOC连接的智能组件。 react loadable似乎不是这样的,因为这是独立的模块,在创建的未定义的中抛出.json 正确加载的哑组件示例: "common/HeaderTitle": [ { "id": 667, "name": "./src/app/components/common/Heade
react redux
或其他HOC连接的智能组件。
react loadable
似乎不是这样的,因为这是独立的模块,在创建的未定义的中抛出.json
正确加载的哑组件示例:
"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 }));
});
这真的快把我逼疯了。这个包看起来真的很好,我想用它。但我找不到任何关于这类问题的信息,Github上也没有问题部分
愿意接受任何建议或帮助。提前谢谢。只是一个猜测,但我认为这与您正在导入index.js
有关,react loadable不会在loadable.Capture中发现这一点。或者wepback插件没有在react loadable.json
文件中创建正确的映射
我在生产应用程序(包括react router、redux、react loadable)中使用的一个技巧是使用webpack的命名块:
const AsyncComponent = Loadable({
loader: () => import(/* webpackChunkName: "myNamedChunk" */ './SomeComponent'),
modules: ['myNamedChunk']
});
通过这种方式,您可以控制模块名称并显式告诉react loadable映射什么
我还写了一篇关于如何在create-react-app项目中实现这一点的文章:如何使用react-loadable导入异步组件?您的问题@ronnyr解决了吗?谢谢您的回复。我不知道区块名称。我添加了块名称,这是一个很大的改进。不幸的是,这并不能解决我的问题。Webpack很好地创建了块,但在react loadable
中,它在undefined
中不断缩进块。但这些模块似乎都不起作用。我为NotFound
组件添加了模块404
,但在json中它仍然引用“/common/NotFound”
。也检查了你的文章,也没有看到任何破坏性的变化。。但再次感谢您的回复。我想试试别的东西。。
const AsyncComponent = Loadable({
loader: () => import(/* webpackChunkName: "myNamedChunk" */ './SomeComponent'),
modules: ['myNamedChunk']
});