README
Use the power of renderprop to delived a Library as a React component. Based on 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!
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'));
<Moment>
{ (momentjs) => <span> {momentjs(date).format(FORMAT)}</span> }
</Moment>
// You can use suspense
const Moment = importedLibraryDefault( () => import('momentjs'), { async: true });
<Suspense>
<Moment>
{ (momentjs) => <span> {momentjs(date).format(FORMAT)}</span> }
</Moment>
</Suspense>
May be you have a small library, you may use somewhere inside your components?
Codesplit it!
import {importedLibrary} from 'react-imported-library';
const Utils = importedLibrary( () => import('./utils.js'));
<Utils>
{ ({a,b,c }) => <span> {a(b+c())} </span> }
</Utils>
May be you also have to calculate something heavy, not to do it on every render
?
// you may use "initialization hook" to offload some computations
<Utils
initial={ ({a,b,c}) => ({ result: a(b+c()) })}
>
{(_,state) => <span>{state.result}</span>}
</Utils>
API
importedLibrary
importedLibrary(importer, options?): Component
importer
is animport
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 withexportPicker
configured to pick.default
lazyLibrary
lazyLibrary(importer): Component
- is just importedLibrary withasync
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 indicatorloading: ReactComponent
- unthrottled loading indicator.
Licence
MIT