为 NextJS 中的所有页面设置默认 Head?

Eva*_*nss 5 next.js

您可以为 NextJS 中的组件设置一个默认值,Head以便其他页面从中扩展吗?

就我而言,我需要在每个页面上加载字体:

  <Head>
    <link
      href="path-to-font"
      rel="stylesheet"
    />
  </Head>
Run Code Online (Sandbox Code Playgroud)

我可以使用自定义文档文件来完成此操作,但默认值Head似乎更简单。

https://nextjs.org/docs/advanced-features/custom-document

sub*_*tra 7

如果Head不需要经常更改,您可以采用自定义文档方法。但是,如果您希望事物是动态的,例如不同页面的不同标题,我建议将静态布局保留在客户文档中,并将动态布局单独保留在另一个组件中,例如

在 _document.js 中


// this will define the default layout for the page

render() {
    return (
      <Html lang="en">
        <Head>
          <meta httpEquiv="Content-Type" content="text/html; charset=utf-8" />
          <meta
            name="viewport"
            content="width=device-width, initial-scale=1.0"
          />
          // links for static assets
        </Head>
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    );
  }

Run Code Online (Sandbox Code Playgroud)

如果您希望内容像标题一样是动态的,请创建一个新的布局组件,将所有组件包装在特定页面上。

const Layout = ({children, title="default title", description="default-description"}) => {


  return (
    <>
      <Head>
        <meta name="description" content={description} />
        <title>{title}</title>
      </Head>
      // you can header component here
      <main>
        {children}
      </main>
      // you can add your footer component here
    </>
  );

}

Run Code Online (Sandbox Code Playgroud)

现在,您只需使用布局包裹页面即可使内容变得动态。

const MyPage = (props) => {

  return (
    <Layout title="the-dynamic-title" description="the-dynamic-description">
      // all other components for your page goes here
    </Layout>
  )

} 

Run Code Online (Sandbox Code Playgroud)