1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00
next.js/lib/dynamic.js
2017-04-18 01:45:50 +05:30

45 lines
1 KiB
JavaScript

import React from 'react'
let currentChunks = []
export default function dynamicComponent (promise, Loading = () => (<p>Loading...</p>)) {
return class Comp extends React.Component {
constructor (...args) {
super(...args)
this.state = { AsyncComponent: null }
this.isServer = typeof window === 'undefined'
this.loadComponent()
}
loadComponent () {
promise.then((AsyncComponent) => {
if (this.mounted) {
this.setState({ AsyncComponent })
} else {
if (this.isServer) {
currentChunks.push(AsyncComponent.__webpackChunkName)
}
this.state.AsyncComponent = AsyncComponent
}
})
}
componentDidMount () {
this.mounted = true
}
render () {
const { AsyncComponent } = this.state
if (!AsyncComponent) return (<Loading {...this.props} />)
return <AsyncComponent {...this.props} />
}
}
}
export function flushChunks () {
const chunks = currentChunks
currentChunks = []
return chunks
}