项目作者: jaywcjlove

项目描述 :
A higher order component for loading components with dynamic imports.
高级语言: JavaScript
项目地址: git://github.com/jaywcjlove/react-dynamic-loadable.git
创建时间: 2018-03-29T09:48:47Z
项目社区:https://github.com/jaywcjlove/react-dynamic-loadable

开源协议:

下载


react-dynamic-loadable

Build and Lint

A higher order component for loading components with dynamic imports.

Install

  1. npm install react-dynamic-loadable --save

Simple Example

Simple Example code

  1. import loadable from 'react-dynamic-loadable';
  2. import Loading from './my-loading-component';
  3. // Add Loading component.
  4. loadable.setDefaultLoadingComponent(<div>Loading</div>);
  5. const LoadableComponent = loadable({
  6. component: () => import('./my-component'),
  7. // LoadingComponent: () => Loading,
  8. });
  9. export default class App extends React.Component {
  10. render() {
  11. return <LoadableComponent></LoadableComponent>;
  12. }
  13. }

Example

Use Redux (@rematch), React Router Example.

Example code

  1. import React from 'react';
  2. import { model } from '@rematch/core';
  3. import loadable from 'react-dynamic-loadable';
  4. const dynamicWrapper = (models, component) => loadable({
  5. models: () => models.map((m) => {
  6. return import(`./models/${m}.js`).then((md) => {
  7. model({ name: m, ...md[m] || md.default });
  8. });
  9. }),
  10. component,
  11. LoadingComponent: () => <span>loading....</span>,
  12. });
  13. export const getRouterData = () => {
  14. const conf = {
  15. '/': {
  16. component: dynamicWrapper(['user'], () => import('./layouts/BasicLayout')),
  17. },
  18. '/home': {
  19. component: dynamicWrapper([], () => import('./routes/Home')),
  20. },
  21. '/login': {
  22. component: dynamicWrapper(['user'], () => import('./routes/Login')),
  23. },
  24. };
  25. return conf;
  26. };

Server-Side Rendering

  1. // webpack.config.js
  2. import { DynamicLoadablePlugin } from 'react-dynamic-loadable/DynamicLoadablePlugin';
  3. export default {
  4. plugins: [
  5. new DynamicLoadablePlugin({
  6. filename: './dist/loadable-assets.json',
  7. exclude: /.(js|css)$/
  8. }),
  9. ],
  10. };
  1. import { getBundles } from 'react-dynamic-loadable/DynamicLoadablePlugin';
  2. let bundles = getBundles(stats, modules);