我正在用Next.js构建一个电子商务网络应用程序,我被困在了产品过滤上。假设有三种可能的过滤选项:
现在,过滤器应该作为子页面工作。假设用户为男性选择了太阳镜,所以URL应该是这样的: / sunglasses /men。下面是我的网站上的4个可能的示例URL:
我不知道路由器应该如何区分前两个URL,并知道第一个URL中的第二个参数是一个性过滤器,但是第二个URL中的第二个参数是一个品牌过滤器。
我正在使用Next.js及其服务器端呈现(getServerSideProps)。
谢谢你的帮助。
发布于 2022-09-01 11:34:58
您可以使用路由名称内的spread操作符来解决这个问题。
# pages/[...product].ts示例:pages/sunglasses/men/gucci
查询对象将如下所示
{"product": ["sunglasses","men","gucci"]}更多信息请查看Nextjs文档
发布于 2021-07-01 16:03:30
如果不想创建单独的路由,可以使用下面的gerServerSideProps实现
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:[]
},
};
}
}发布于 2021-07-01 15:38:06
您可以为具有相同参数的路由创建一个单独的文件夹。
e.g
1.太阳镜/男子
1.页/墨镜/性别/性别
2.太阳镜/雷班
2./页面/太阳镜/类型/Type.js
3.墨镜/男子/雷班
3./页/太阳镜/物品/性别/item.js
4.墨镜/雷班/男子
4.页/墨镜/性别/项目/性别
https://stackoverflow.com/questions/68212843
复制相似问题