如何在NEXT.js中创建子页面

时间:2018-12-02 23:06:29

标签: node.js reactjs react-native next.js

我尝试获得

之类的子页面
  • example.com/tests/project1
  • example.com/tests/project2

在nextjs https://nextjs.org/

我能够创建

之类的页面
  • example.com/page1
  • example.com/page2

通过放置类似

的页面
  

page1.js

在页面“文件夹”中,但如何创建子页面,如

  • example.com/tests/page1
  • example.com/tests/page2

我尝试在Pages文件夹中创建子文件夹,但这不起作用并输出错误。

我们将不胜感激

3 个答案:

答案 0 :(得分:0)

您可以使用express.js之类的服务器并使用路由系统:

const express = require('express')
const next = require('next')

const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare()
  .then(() => {
    const server = express()

    server.get('/test/:page', (req, res) => {
      const page = req.params.page;
      let file = '';
      switch(page) {
         case 'page1':
               file = '/page1';
               break;
         case 'page2':
               file = '/page2';
               break;
         default:
               file = '/page1';
      }
      return app.render(req, res, file, { page })
    })

    server.get('*', (req, res) => {
      return handle(req, res)
    })

    server.listen(port, (err) => {
      if (err) throw err
      console.log(`> Ready on http://localhost:${port}`)
    })
  })

答案 1 :(得分:0)

在pages文件夹内创建一个测试文件夹,nextjs会自动创建一个带有该文件夹的名称和所创建页面的子路由。

答案 2 :(得分:0)

在@ karin-bhandari之类的页面内创建测试文件夹。然后,为每个子页面创建一个新文件夹,并在其中包含类或函数,因此您的情况将是:

./ pages / tests / project1 / project1.js

./ pages / tests / project1 / project2.js

如果您具有 tests 目录的动态路由,则可以有条件地呈现页面

const Test = props => {
  const router = useRouter();

  return (
    <Layout>
      {router.query.subdirectory === "edit" ? (
        <EditPage />
      ) : (
        <Test id={router.query.id} data={props.data} />
      )}
    </Layout>
  );
};

其中id是测试标识符,subdirectory是子目录路径。