NextJS URL 类似 React-Router 的参数

NextJS URL params like React-Router

我是NextJS的新手,第一印象很好。 但是在给它一个机会之后,我遇到了一些问题,比如 URL 路由和自定义参数,比如 react-router.

目前我们可以用 NextJS 做什么

https://url.com/users?id:123

为了更好的 URL 模式我们需要什么

https://url.com/users/123

在react-router里面有完美的例子https://reacttraining.com/react-router/web/example/url-params

此示例将帮助您定义参数化的命名路由。它使用 nest/routes 并让您定义您的自定义偏好路线。 希望对你有帮助。

https://github.com/zeit/next.js/tree/master/examples/with-next-routes

对于旧版本:< 9.x

您可以使用 next/linkas 功能:

<Link prefetch as={`/product/${slug}`} href={`/product?slug=${slug}`}>

Link 在浏览器上将显示为 /product/slug,在内部映射到 /product?slug=slug

您需要 custom server 用于 server-side 映射:

server.get("/product/:slug", (req, res) => {
  return app.render(req, res, "/product", { slug: req.params.slug })
})

9.x 及以上

接下来9.x支持file system based dynamic routing。您不再需要自定义服务器。

Next.js 支持使用基本命名参数创建路由,这是一种由 path-to-regexp(为 Express 提供支持的库)推广的模式。

创建与路由 /product/:slug 匹配的页面现在可以通过在您的页面目录中创建一个名为:pages/product/[slug].js.

的文件来实现

还支持多个动态 URL 细分!

./pages/blog/[blogId]/comments/[commentId].js
./pages/posts/[pid]/index.js

我也遇到过同样的问题,但我找到了这个包, https://github.com/fridays/next-routes

效果和react-router几乎一样,我试过了,对我有用。

对于迟到的任何人,我们现在在 Next 9 中有 dynamic routing

这将允许 url 结构像这样通过使用文件结构而无需额外的包来制作。

您可以创建一个文件pages/user/[id].js

import { useRouter } from 'next/router'

const User = () => {
  const router = useRouter()
  const { id } = router.query

  return <p>User: {id}</p>
}

export default User

首先导入路由器

import Router from 'next/router'

那么如果你想在 Link 标签中使用它

<Link href={{ pathname: '/about', query: { name: 'Sajad' } }}>

如果你想在函数中或回调后使用它

Router.push({
    pathname: '/about',
    query: { name: 'Sajad' },
  })