【问题标题】:Code splitting with React Loadable and routes with containers使用 React Loadable 进行代码拆分和使用容器进行路由
【发布时间】:2018-08-08 11:30:29
【问题描述】:

我想实现每个主路由的代码拆分,这样每个页面都会有自己的文件(连同它的子组件),例如我有一个主渲染函数,其中包含指向容器的Route 组件:

    <Route path={`path1`} component={foo.container} />
    <Route path={`path2`} component={bar.container} />

每个容器看起来像这样:

const mapDispatchToProps = {
... actions etc ...
}

const mapStateToProps = (state) => ({
... selectors etc ...
})

const withConnect = connect(mapStateToProps, mapDispatchToProps);

export default compose(withConnect)(MyComponent);

我试图包装一个容器并在路由中引用它,但它不起作用:

export default Loadable({
  loader: () => import('./MyContainer'),
  loading() {
    return (<div>Loading...</div>)
  },
});

那么应该包装什么呢?

【问题讨论】:

  • 检查你的 .babelrc 文件,看看你是否使用了插件语法动态导入。作为您在 react-loadable 中的动态导入

标签: reactjs react-router react-router-v4 react-router-dom react-loadable


【解决方案1】:

这里是一个简化的例子,如何使用react-routerreact-loadable实现代码拆分:

MyPage.jsx - 您要在单独文件中生成的页面

import React from 'react';

const MyPage = () => (
    <div>My page</div>
);

export default MyPage;

LoadableMyPage.jsx - 使您的页面可加载的包装器

import React from 'react';
import Loadable from 'react-loadable';

const LoadableMyPage = Loadable({
    loader: () => import('./MyPage'),
    loading: () => <div>Loading...</div>,
});

const LoadableMyPage = () => (
    <LoadableMyPage />
);

export default LoadableMyPage;

Router.jsx

import React from 'react';
import { Switch, Route } from 'react-router-dom';
import LoadableMyPage from './LoadableMyPage';

const Router = () => (
    <Switch>
        <Route path="/" exact component={LoadableMyPage} />
        ...
    </Switch>
);

正如@Mohit Tilwani 提到的,动态导入插件是必需的,因为它目前位于stage-3 中,还不是ECMAScript 的一部分。

https://github.com/tc39/proposal-dynamic-import

我开始编写自己的 React 样板,并在其中实现了相同的代码拆分。如果卡住了,请毫不犹豫地检查一下。

https://github.com/peetya/react-boilerplate

【讨论】:

  • 我为每条路线都有容器,这些容器通过所有相关的选择器和减速器与商店连接。你如何使用它们?
  • 另外你有两次const LoadableMyPage,我认为第二个应该有不同的名字。
  • 如何检查它是否有任何作用?
猜你喜欢
  • 2019-06-18
  • 1970-01-01
  • 2020-10-22
  • 2016-12-08
  • 2017-07-16
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多