Next.js uses the App component to initialize pages. You can override it creating a ./pages/_app.js file if, for example. you want to do some of the following things:
- Persisting layout between page changes
- Keeping state when navigating pages
- Custom error handling using
componentDidCatch - Inject additional data into pages
- Add global CSS
function MyApp({ Component, pageProps }) { return <Component {...pageProps} />}
export default MyAppThe Component prop is the active page, so whenever you navigate between routes, Component will change to the new page.
Customizing Document
You can create a ./pages/_document.js to augment your application’s and tags.
import Document, { Html, Head, Main, NextScript } from 'next/document'
class MyDocument extends Document { render() { return ( <Html> <Head /> <body> <Main /> <NextScript /> </body> </Html> ) }}
export default MyDocument, , and are required for the page to be properly rendered. The component used here is not the same one from [`next/head`](https://nextjs.org/docs/api-reference/next/head). To set individual tags, you should use next/head in your pages or components.
Document is only rendered in the server, event handlers like onClick won’t work.
Custom Error pages
Next.js provides a static 404 page by default without having to add any additional files. To create a custom 404 page you can create a pages/404.js file. This file is statically generated at build time.
export default function Custom404() { return <h1>404 - Page Not Found</h1>}Same goes for 500 error page
export default function Custom500() { return <h1>500 - Server-side error occurred</h1>}500 errors are handled both client-side and server-side by the Error component. If you wish to override it, define the file pages/_error.js and add the following code:
function Error({ statusCode }) { return ( <p> {statusCode ? `An error ${statusCode} occurred on server` : 'An error occurred on client'} </p> )}
Error.getInitialProps = ({ res, err }) => { const statusCode = res ? res.statusCode : err ? err.statusCode : 404 return { statusCode }}
export default Error