动态导入

Examples

ext.js 支持 JavaScript 的 TC39 提议dynamic import proposal。你可以动态导入 JavaScript 模块(如 React 组件)。

动态导入相当于把代码分成各个块管理。Next.js 服务端动态导入功能,你可以做很多炫酷事情。

下面介绍一些动态导入方式:

1. 基础支持 (同样支持 SSR)

  1. import dynamic from 'next/dynamic'
  2.  
  3. const DynamicComponent = dynamic(import('../components/hello'))
  4.  
  5. export default () =>
  6. <div>
  7. <Header />
  8. <DynamicComponent />
  9. <p>HOME PAGE is here!</p>
  10. </div>

2. 自定义加载组件

  1. import dynamic from 'next/dynamic'
  2.  
  3. const DynamicComponentWithCustomLoading = dynamic(
  4. import('../components/hello2'),
  5. {
  6. loading: () => <p>...</p>
  7. }
  8. )
  9.  
  10. export default () =>
  11. <div>
  12. <Header />
  13. <DynamicComponentWithCustomLoading />
  14. <p>HOME PAGE is here!</p>
  15. </div>

3. 禁止使用 SSR

  1. import dynamic from 'next/dynamic'
  2.  
  3. const DynamicComponentWithNoSSR = dynamic(import('../components/hello3'), {
  4. ssr: false
  5. })
  6.  
  7. export default () =>
  8. <div>
  9. <Header />
  10. <DynamicComponentWithNoSSR />
  11. <p>HOME PAGE is here!</p>
  12. </div>

4. 同时加载多个模块

  1. import dynamic from 'next/dynamic'
  2.  
  3. const HelloBundle = dynamic({
  4. modules: () => {
  5. const components = {
  6. Hello1: import('../components/hello1'),
  7. Hello2: import('../components/hello2')
  8. }
  9.  
  10. return components
  11. },
  12. render: (props, { Hello1, Hello2 }) =>
  13. <div>
  14. <h1>
  15. {props.title}
  16. </h1>
  17. <Hello1 />
  18. <Hello2 />
  19. </div>
  20. })
  21.  
  22. export default () => <HelloBundle title="Dynamic Bundle" />