【问题标题】:How to use Dynamic Routing to trigger the same .js in pages?如何使用动态路由在页面中触发相同的 .js?
【发布时间】:2019-12-19 16:11:00
【问题描述】:

我有多个路线,例如:

  1. /解决方案/
  2. /solutions/web-development/
  3. /特征/
  4. /features/flexbox/
  5. /plugins/
  6. /plugins/永久链接/

等等。

我想为所有这些路由运行同一个文件 (abc.js)。我检查了 Next.js 的 Dynamic Routing 部分,但根据该部分,我的理解是我需要创建多个目录并在多个实例上复制同一个文件。

有什么方法可以让我为所有 DEFINED 路由或整个站点运行单个文件?

编辑:我知道有一种方法可以通过创建 Custom Server and manually add dynamic routes 来做到这一点但是我希望在不创建外部服务器的情况下实现这一目标。

【问题讨论】:

标签: reactjs next.js


【解决方案1】:

我找到了解决这个问题的方法。这可以使用next.config.js 文件来完成。您唯一需要的是页面URLs,然后您可以应用同一个文件,甚至可以添加条件以使用多个文件应用。

这里是示例代码:

module.exports = {
  exportPathMap: async function(
    defaultPathMap,
    { dev, dir, outDir, distDir, buildId }
  ) {
    const paths = {};
    const pageURLs = [
      '/solutions/',
      '/solutions/web-development/',
      '/features/',
      '/features/flexbox/',
      '/plugins/',
      '/plugins/permalink/'
    ];

    var loopInit = 0;
    var loopCount = pageURLs.length;
    var url = '';
    for (loopInit = 0; loopInit < loopCount; loopInit += 1) {
      url = pageURLs[loopInit];
      switch(url) {
        case '/solutions/':
          paths[`${url}`] = {
            page: '/solutions',
            query: {
              slug: url
            }
          };
          break;
        case '/features/':
          paths[`${url}`] = {
            page: '/features',
            query: {
              slug: url
            }
          };
          break;
        default:
          paths[`${url}`] = {
            page: '/',
            query: {
              slug: url
            }
          };
          break;
      }
    }

    return paths;
  },
  exportTrailingSlash: true
};

在上面的示例中,我在 pageURLs 变量中硬编码了 URL。您可以在其中传递动态值,例如从 WordPress 获取永久链接、从 Drupal 或任何其他 CMSHeadless CMS等

在 switch 案例中,我在 /solutions//features/ 上应用了不同的模板。对于其余的 URL,我将应用一个模板。

注意: page: '/'pages 目录下的index.js 类似,page: '/solutions' 指 pages 目录下的 solutions.js 等等。它可以根据开发人员的选择进行更改/变化。

我已经在 Next.js9.1.4 版本上测试了这个解决方案。有关详细信息,请参阅 Next.js 文档。

  1. https://nextjs.org/docs#custom-configuration
  2. https://nextjs.org/docs#usage

已编辑:此解决方案适用于服务器端渲染和Next.js 导出。

【讨论】:

  • 它不适用于非静态页面的生产环境
  • @Meliborn 您正在使用哪个 NEXT.js 版本?正如我在答案中提到的那样,我已经在 NEXT.js 的 9.1.4 版本上测试了这个解决方案,并且可能这个解决方案不再适用于较新的版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 2018-12-19
  • 2019-10-09
相关资源
最近更新 更多