我目前正在使用带有 Suspense 和 Lazy 的 React 16 来对我的代码库进行代码拆分。虽然我想预加载组件。
在下面的示例中,我有两条路线。有没有办法在安装Demo
后立即预Prime
加载?我试图在componentDidMount
页面中创建另一个动态导入Prime
,但React.lazy
似乎没有得到与下面的动态导入相同的文件。
import React, { lazy, Suspense } from 'react';
import { Switch, Route, withRouter } from 'react-router-dom';
import GlobalStyle from 'styles';
import Loading from 'common/Loading';
const Prime = lazy(() => import(/* webpackChunkName: "Prime" */'modules/Prime'));
const Demo = lazy(() => import(/* webpackChunkName: "Demo" */'modules/Demo'));
const App = () => (
<main>
<GlobalStyle />
<Suspense fallback={<Loading>Loading...</Loading>}>
<Switch>
<Route path="/" component={Prime} exact />
<Route path="/demo" component={Demo} />
</Switch>
</Suspense>
</main>
);
export default withRouter(App);
因此,我尝试了不同的方法,例如使用和不使用webpackChunkName
以及在 中导入其他组件的不同方式,componentDidMount
如下所示。导入文件的前两种方法componentDidMount
导致了下图底部显示的 Webpack 错误。只有第三个继续,但2.[hash].js
在图像中制作文件,仅在访问页面后加载,而不是在componentDidMount
我在这里想念什么?
代码modules/Demo.jsx
:
import React from 'react';
import LogoIcon from 'vectors/logo.svg';
import PageLink from 'common/PageLink';
import Anchor from 'common/Anchor';
import CenteredSection from 'common/CenteredSection';
const Demo = () => (
<CenteredSection variant="green">
<LogoIcon />
<PageLink to="/" variant="green">Go to home page</PageLink>
</CenteredSection>
);
export default Demo;