react-with-dynamic
Version:
Improved lazy loading in React with suspense and error boundary
111 lines (77 loc) • 2.8 kB
Markdown
//img.shields.io/npm/v/react-with-dynamic?style=flat-square)](https://www.npmjs.com/package/react-with-dynamic)
[](https://www.npmjs.com/package/react-with-dynamic)
[](https://www.npmjs.com/package/react-with-dynamic)
[](https://codecov.io/gh/JB1905/react-with-dynamic)
[](https://travis-ci.com/JB1905/react-with-dynamic)
[](https://bundlephobia.com/result?p=react-with-dynamic)
Improved lazy loading in React with suspense and error boundary
- [Basic](https://codesandbox.io/s/basic-demo-4oiuf)
- [With Context](https://codesandbox.io/s/context-demo-5n20l)
First, install the library in your project by npm:
```sh
$ npm install react-with-dynamic
```
Or Yarn:
```sh
$ yarn add react-with-dynamic
```
**• Use withDynamic:**
```js
// App.js
import React from 'react';
import { withDynamic } from 'react-with-dynamic';
const LazyComponent = withDynamic({
suspenseFallback: <p>Loading...</p>,
errorBoundaryProps: {
fallback: <p>Oops! Error occurred!</p>,
onError: (err) => console.log(err),
},
})(lazy(() => import('./components/LazyComponent')));
const App = () => {
return <LazyComponent />;
};
export default App;
```
---
**• Set DynamicProvider (if you want to use the same suspense fallback and error boundary config for all lazy components wrapped in withDynamic HOC):**
```js
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { DynamicProvider } from 'react-with-dynamic';
import App from './App';
ReactDOM.render(
<DynamicProvider
suspenseFallback={<p>Loading...</p>}
errorBoundaryProps={{
fallback: <p>Oops! Error occurred!</p>,
onError: (err) => console.log(err),
}}
>
<App />
</DynamicProvider>,
document.getElementById('root')
);
```
**• Then use withDynamic:**
```js
// App.js
import React from 'react';
import { withDynamic } from 'react-with-dynamic';
const LazyComponent = withDynamic()(
lazy(() => import('./components/LazyComponent'))
);
const App = () => {
return <LazyComponent />;
};
export default App;
```
This project is licensed under the MIT License © 2021-present Jakub Biesiada
[![NPM version](https: