UNPKG

html-react-portal

Version:

Neat way to lazy load and portalize react components into the DOM.

29 lines (25 loc) 1.07 kB
var React = require('react'); var ReactDOM = require( 'react-dom'); var HTMLReactPortal = React.createClass({ render: function(elements) { return ( <React.Fragment> { Object.keys(props.elements).map( key => { const vanilla = props.elements[key] const {component, ...rest} = vanilla.attributes.hasOwnProperty('data')? JSON.parse(vanilla.attributes.data.value): {} return component ? <TargetComponent key={key} vanilla={vanilla} component={React.lazy(() => import(`srcPATH/${component}`))} {...rest}/> : <HTMLReactPortal key={key} elements={vanilla.children}/> }) } </React.Fragment> ) } }); var TargetComponent = React.createClass({ render: function({vanilla: vanilla, component: Component, ...rest}) { return ReactDOM.createPortal(<React.Suspense fallback={<React.Fragment/>}> <Component {...rest} vanilla={vanilla}>{vanilla.innerHTML}</Component> </React.Suspense>, vanilla.parentElement) } }); module.exports.default = HTMLReactPortal;