import NextDocument, { DocumentContext, DocumentInitialProps } from 'next/document' import { ServerStyleSheet } from 'styled-components' export default class Document extends NextDocument { static async getInitialProps(ctx: DocumentContext): Promise { const sheet = new ServerStyleSheet() const originalRenderPage = ctx.renderPage try { ctx.renderPage = () => { return originalRenderPage({ enhanceApp: (App) => { return function EnhancedApp(props) { return sheet.collectStyles() } }, }) } const initialProps = await NextDocument.getInitialProps(ctx) return { ...initialProps, styles: [initialProps.styles, sheet.getStyleElement()], } } finally { sheet.seal() } } }