代码之家  ›  专栏  ›  技术社区  ›  rap-2-h

在不改变基本行为的情况下进行最小的替换

  •  0
  • rap-2-h  · 技术社区  · 5 年前

    根据next.js documentation ,如果要自定义 <App> ,您必须创建一个 pages/_app.js 第页,然后将修改内容放入其中。

    不过,在他们的示例中有一些代码,我不知道它的目的是什么:

    import React from 'react'
    import App, { Container } from 'next/app'
    
    export default class MyApp extends App {
      static async getInitialProps({ Component, router, ctx }) {
        let pageProps = {}
    
        if (Component.getInitialProps) {
          pageProps = await Component.getInitialProps(ctx)
        }
    
        return { pageProps }
      }
    
      render () {
        const { Component, pageProps } = this.props
    
        return (
          <Container>
            <Component {...pageProps} />
          </Container>
        )
      }
    }
    

    这是最小形式吗?此示例是否更改了初始行为?

    换句话说,此代码是否足以扩展原始应用程序:

    import React from 'react'
    import App from 'next/app'
    
    export default class MyApp extends App {}
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Matthew Rapati    5 年前

    是的,你所拥有的不会改变任何东西,并且是扩展应用程序的最低限度(我已经测试过这个)。

    我想他们把重写的 getInitialProps render 文档中的方法是因为这些方法可能是您希望添加自定义项的地方,如果要覆盖它们,则需要这些方法中的代码。

    例如,如果您重写 GET初始化PROPS 但不要返回 Component.getInitialProps(ctx) (在本例中,组件是当前页面组件,如 ./pages/index.js )那么页面组件就不会设置初始属性。