import Document, { Head, Main, NextScript } from 'next/document' import Helmet from 'react-helmet' export default class extends Document { static async getInitialProps (...args) { const documentProps = await super.getInitialProps(...args) // see https://github.com/nfl/react-helmet#server-usage for more information // 'head' was occupied by 'renderPage().head', we cannot use it return { ...documentProps, helmet: Helmet.renderStatic() } } // should render on get helmetHtmlAttrComponents () { return this.props.helmet.htmlAttributes.toComponent() } // should render on get helmetBodyAttrComponents () { return this.props.helmet.bodyAttributes.toComponent() } // should render on get helmetHeadComponents () { return Object.keys(this.props.helmet) .filter(el => el !== 'htmlAttributes' && el !== 'bodyAttributes') .map(el => this.props.helmet[el].toComponent()) } get helmetJsx () { return () } render () { return ( { this.helmetJsx } { this.helmetHeadComponents }
) } }