Use React.lazy()
with named exports (or imports, if you're all opposite)
Install the react-lazy-named
package with yarn or npm.
yarn add react-lazy-named
// or
npm install react-lazy-named
Works just like React.lazy() but with an added argument - export name.
import React from 'react';
import lazy from 'react-lazy-named';
const PrimaryButton = lazy(() => import('./Buttons'), 'primary');
const MyComponent = () => (
<React.Suspense fallback={null}>
<PrimaryButton text="YES!" />
</React.Suspense>
);
So you want to use default exports? Sure, just don't use the second argument.
const Card = lazy(() => import('./Card'));
// same as
const Card = lazy(() => import('./Card'), 'default');
Some libraries like framer-motion use deeply nested components. In other words, they export objects with components in properties. Guess what, you can reach those,too!
const MotionDiv = lazy(() => import('framer-motion'), 'motion.div');
You can also use Webpack magic comments as usual.
const PrimaryButton = lazy(
() => import('./Buttons' /* webpackChunkName: "buttons", webpackPreload: true */),
'primary'
);
Your project should already be running React 16.6+ (React.lazy() required).
This project uses Jest for unit testing. To execute tests run this command:
yarn test
It's useful to run tests in watch mode when developing for incremental updates.
yarn test:watch
This project is MIT licensed.