首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Next.js中的动态嵌套路由

Next.js中的动态嵌套路由
EN

Stack Overflow用户
提问于 2021-07-01 15:17:06
回答 3查看 1.6K关注 0票数 1

我正在用Next.js构建一个电子商务网络应用程序,我被困在了产品过滤上。假设有三种可能的过滤选项:

  1. 按类别-屈光/太阳镜
  2. 按性别分列-男子/妇女
  3. 按品牌- rayban / gucci

现在,过滤器应该作为子页面工作。假设用户为男性选择了太阳镜,所以URL应该是这样的: / sunglasses /men。下面是我的网站上的4个可能的示例URL:

  1. /太阳镜/男人
  2. /太阳镜/雷班
  3. /太阳镜/男人/雷班
  4. /太阳镜/雷班/男子

我不知道路由器应该如何区分前两个URL,并知道第一个URL中的第二个参数是一个性过滤器,但是第二个URL中的第二个参数是一个品牌过滤器。

我正在使用Next.js及其服务器端呈现(getServerSideProps)。

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-01 11:34:58

您可以使用路由名称内的spread操作符来解决这个问题。

代码语言:javascript
复制
#  pages/[...product].ts

示例:pages/sunglasses/men/gucci

查询对象将如下所示

代码语言:javascript
复制
{"product": ["sunglasses","men","gucci"]}

更多信息请查看Nextjs文档

票数 1
EN

Stack Overflow用户

发布于 2021-07-01 16:03:30

如果不想创建单独的路由,可以使用下面的gerServerSideProps实现

代码语言:javascript
复制
export async function gerServerSideProps({ params, ...props }) {
  const products = await fetchProducts();
  if (params.slugs && params.slugs instanceof Array) {
    if (params.slugs.length > 2) {
      const filteredProducts = products.filter(
        (p) =>
          p.category === params.slugs[0] &&
          (p.sex === params.slugs[1] || p.sex === params.slugs[2])&&
          (p.brand === params.slugs[1] || p.brand === params.slugs[2])
      );
      return {
        props: {
          products:filteredProducts
        },
      };
    } else if (params.slugs.length > 1) {
        const filteredProducts = products.filter(
            (p) =>
              p.category === params.slugs[0] &&
              (p.sex === params.slugs[1] || 
              p.brand === params.slugs[1])
          );
          return {
            props: {
              products:filteredProducts
            },
          };
      
    } else if(params.slugs.length > 0){
        const filteredProducts = products.filter(
            (p) =>
              p.category === params.slugs[0])
          return {
            props: {
              products:filteredProducts
            },
          };
  }
  else{
    return {
        props: {
          products:[]
        },
    };

}
}
票数 2
EN

Stack Overflow用户

发布于 2021-07-01 15:38:06

您可以为具有相同参数的路由创建一个单独的文件夹。

e.g

1.太阳镜/男子

1.页/墨镜/性别/性别

2.太阳镜/雷班

2./页面/太阳镜/类型/Type.js

3.墨镜/男子/雷班

3./页/太阳镜/物品/性别/item.js

4.墨镜/雷班/男子

4.页/墨镜/性别/项目/性别

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68212843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档