NextJS URL 参数,如 React-Router

IT技术 reactjs react-router next.js
2021-05-24 11:51:10

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

目前我们可以用 NextJS 做什么

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

我们需要什么才能获得更好的 URL 模式

https://url.com/users/123

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

4个回答

对于旧版本:< 9.x

您可以使用next/linkas功能:

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

浏览器上的链接将显示为/product/slug内部映射到/product?slug=slug

您需要有一个用于服务器端映射自定义服务器

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

对于 9.x 及更高版本

Next 9.x 支持基于文件系统的动态路由您不再需要自定义服务器。

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

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

还支持多个动态 URL 段!

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

对于迟到的任何人,我们现在在 Next 9 中动态路由

这将允许通过使用文件结构来制作这样的 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

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

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

首先导入路由器

import Router from 'next/router'

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

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

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

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