An open API service indexing awesome lists of open source software.

https://github.com/thekashey/react-imported-library

✂Code-split any library using renderProps!
https://github.com/thekashey/react-imported-library

code-splitting codesplit reactjs

Last synced: about 1 year ago
JSON representation

✂Code-split any library using renderProps!

Awesome Lists containing this project

README

          


IMPORTED LIBRARY ✂




imported library




Dont code-split components - code split libraries










Build status






Use the power of renderprop to delived a Library as a React component. Based on
[React-imported-component](https://github.com/theKashey/react-imported-component). Support SSR and React Suspense.

- ⛅️ You can codesplit momentjs, you may async load any library and use it.
- 🏎 Sync on server, and for already loaded stuff, async on client.
- 🚀 Bundler-independent SSR (when used with react-imported-component).
- 🔒 Written in TypeScript.
- 😴 Suspense friendly

## Usage

Have you heard, than moment.js is super hudge? Code split it!
```javascript
import {importedLibraryDefault, setConfig} from 'react-imported-library';

// do you need SSR support? Probably not (affects react-imported-component settings)
setConfig({SSR: false});

// this will import `default` export
const Moment = importedLibraryDefault( () => import('momentjs'));

{ (momentjs) => {momentjs(date).format(FORMAT)} }

// You can use suspense
const Moment = importedLibraryDefault( () => import('momentjs'), { async: true });


{ (momentjs) => {momentjs(date).format(FORMAT)} }

```

May be you have a small library, you may use somewhere inside your components?

Codesplit it!
```js
import {importedLibrary} from 'react-imported-library';
const Utils = importedLibrary( () => import('./utils.js'));

{ ({a,b,c }) => {a(b+c())} }

```

May be you also have to calculate something heavy, not to do it on every `render`?
```js
// you may use "initialization hook" to offload some computations

({ result: a(b+c()) })}
>
{(_,state) => {state.result}}

```

## API
#### importedLibrary
- `importedLibrary(importer, options?): Component`
- `importer` is an `import` statement, or any Promise resolver
- options
- options.async:boolean - enables React.suspense, ie throws a Promise on loading
- options.exportPicker - allows you to "pick" export from the original file

#### importedLibraryDefault
- `importedLibraryDefault(importer, options?): Component` - is just importedLibrary with `exportPicker` configured to pick `.default`

#### lazyLibrary
- `lazyLibrary(importer): Component` - is just importedLibrary with `async` configured be __true__

#### all helpers returns "Component"
- Component
- `initial: (library: T) => K;` - state initializator, state will be passed as second argument to a children.
- `children: (library: T, state: K) => React.ReactNode` - function-as-children
- -- does not work in async mode --
- `error: ReactComponent` - error indicator
- `loading: ReactComponent` - __unthrottled__ loading indicator.

## Licence
MIT