如何在Next.js中的pages文件夹中为不同的路线定义不同的布局?

eqqqjvef  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(195)

我想在我的pages目录中实现基于布局的路由。我正在寻找一种方法来使用类似于_app.tsx文件的东西,但只针对特定文件夹中的文件。
这与Remix布线样式的功能类似,其中有一个文件夹(如panel)和一个名为panel.tsx的文件,该文件将“panel”文件夹中的文件与布局 Package 在一起。
如何在Next.js pages目录中实现类似的功能?
我想要的:

pages/
      panel/
            index.tsx
            dashboard.tsx
      panel.tsx

panel.tsx文件将像新app目录中的布局一样工作,基本上我想找到一种方法来 Package 文件夹中的文件,就像Remix或新app目录一样

laik7k3q

laik7k3q1#

您所讨论的内容在Next.js中称为每页布局。它的工作原理如下,正如您在文档中所读到的:
如果需要多个布局,可以在页面中添加属性getLayout,以便返回布局的React组件。这允许您在每页的基础上定义布局。由于我们返回的是函数,因此如果需要,可以使用复杂的嵌套布局。

// pages/index.js

import Layout from '../components/layout'
import NestedLayout from '../components/nested-layout'

export default function Page() {
  return (
    /** Your content */
  )
}

Page.getLayout = function getLayout(page) {
  return (
    <Layout>
      <NestedLayout>{page}</NestedLayout>
    </Layout>
  )
}
// pages/_app.js

export default function MyApp({ Component, pageProps }) {
  // Use the layout defined at the page level, if available
  const getLayout = Component.getLayout || ((page) => page)

  return getLayout(<Component {...pageProps} />)
}

以上是针对/页面的,但是逻辑对于任何路径都是相同的,只要修改导入和布局名称,就可以很好地运行了。

相关问题