Skip to content

Instantly share code, notes, and snippets.

@threepointone
Created December 29, 2016 14:38
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save threepointone/4a997107e758f67a90d2fbd4fb48b16a to your computer and use it in GitHub Desktop.
Save threepointone/4a997107e758f67a90d2fbd4fb48b16a to your computer and use it in GitHub Desktop.
deferred render with react fiber
/* global React, ReactDOMFiber */
/* @jsx deferElement */
const { render, unstable_deferredUpdates } = ReactDOMFiber
class Deferred extends React.Component {
state = { next: false }
componentDidMount() {
unstable_deferredUpdates(() =>
this.setState(state => ({ next: true })))
}
render(){
return this.state.next ? this.props.children : null
}
}
function deferElement(Type, allProps, children){
if(!allProps || !allProps.defer){
return React.createElement(Type, allProps, children)
}
let { defer, ...props } = allProps
return React.createElement(Deferred, {},
React.createElement(Type, props, children))
}
render(
<FancyComponent defer>
this component was rendered lazily!
</FancyComponent>,
document.getElementById('app'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment