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!
; // do you need SSR support? Probably not (affects react-imported-component settings); // this will import `default` exportconst Moment = ; <Moment> <span> </span> </Moment> // You can use suspenseconst Moment = ; <Suspense> <Moment> <span> </span> </Moment></Suspense>
May be you have a small library, you may use somewhere inside your components?
Codesplit it!
;const Utils = ; <Utils> <span> </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= result: > <span>stateresult</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