【问题标题】:Access the route in different way in next js在下一个js中以不同的方式访问路由
【发布时间】:2020-10-23 00:19:43
【问题描述】:

我在 nextjs 中有一个应用程序。我在那里建立了下一条路线:

 <Link
    href="colors/[type]"
    as={`colors/${type}`}
  >
    <a>click</a>
</Link>

这条路线将我重定向到/colors/redcolors/blue 等等,具体取决于用户。 type 这里是一个变量 = 动态元素。

我还有其他链接:

 <Link href="colors">
    <a>click to colors</a>
</Link>

这条路线应该将我重定向到/colors,但是当我点击时我得到错误,因为第一个网址colors/red 不等于这种类型:colors。所以我必须在colors 之后添加一些东西才能让事情发生。
如何解决问题?以及如何让我的第一条路由接受最后一个参数作为可选参数。?

【问题讨论】:

  • 你能展示你的'pages/colors'文件夹结构吗?你在使用动态路由吗?
  • @P.E.Joëssel,我的文件夹结构:颜色 - 文件夹和颜色文件夹内我有 [type].js 文件
  • @P.E.Joëssel,你知道解决方案吗?
  • 如果 /colors 页面与 /colors/[type].js 不同,您可以在 /colors 文件夹中添加 index.js 或创建 /pages/colors.js 页面跨度>
  • 其他解决方案是使用一条捕获所有路由:/colors/[[...type]].js

标签: reactjs next.js


【解决方案1】:

最好的方法是使用动态路由 (more)。首先在您的/colors 文件夹中创建一个名为[[...type]].js 的新页面,该页面将捕获/colors/colors/red。此设置还将捕获/colors/red/blue 之类的路线。

您可以使用下一个路由器检索 url 的可变部分(参见下面的示例)。

import React from 'react';
import Link from "next/link";
import {useRouter} from "next/router";

export default () => {
    const router = useRouter()
    const { type } = router.query;

    return (
        <div>
            <Link href={'/'}>
                Home
            </Link>

            <Link href={'/colors/red'}>
                Red
            </Link>

            <Link href={'/colors/blue'}>
                Blue
            </Link>

            <div>
                {type ? (
                    `Type: ${type}`
                ) : (
                    'no type'
                )}
            </div>
        </div>
    );
}
猜你喜欢
  • 2020-12-10
  • 2020-02-23
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 2019-04-06
  • 1970-01-01
相关资源
最近更新 更多