introduction
Next.js 使用App
组件来初始化页面,你能够覆盖App
组件并控制页面的初始化 … 这样你可以做一些很吓人的事情,例如:
- 页面切换之间保持布局的持久性
- 切换页面时保证状态(state)
- 使用
componentDidCatch
自定义错误处理 - 向页面(pages) 注入额外的数据
- 添加全局CSS
要覆盖默认的App
,首先要创建.pages/_app.js
文件,如下:
// import App from 'next/app'
function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />
}
// Only uncomment this method if you have blocking data requirements for
// every single page in your application. This disables the ability to
// perform automatic static optimization, causing every page in your app to
// be server-side rendered.
//
// MyApp.getInitialProps = async (appContext) => {
// // calls page's `getInitialProps` and fills `appProps.pageProps`
// const appProps = await App.getInitialProps(appContext);
//
// return { ...appProps }
// }
export default MyApp
Component
即当前的page
,因此当你在路由之间切换的时候,Component
将会 更新为新的page
,因此你传递给Component
的任何属性都会被page
接收到 …
pageProps
是带有初始属性的对象,该初始化属性由我们某个数据获取方法预先加载到你的页面中(否则它将是一个空对象) …
注意事项
如果你对App
组件进行自定义的时候你的应用程序正在运行中,那么你需要重新启动开发服务器才能够使它生效,仅当pages/_app.js
不存在时才需要重启开发服务器 …
- 在
App
中添加自定义的getInitialProps
将导致不支持静态生成的页面禁用自动静态优化功能 … - 在自定义的
App
添加getInitialProps
,必须添加import App from 'next/app'
,在getInitialProps
内部调用App.getInitialProps(appContext)
并将返回的对象合并到返回值中 … - 当前
App不支持Next.js
数据获取方法(例如getStaticProps
以及getServerSideProps
)
Ts
如果使用的是TypeScript,查看