javascript - Next.JS “Link” vs “router.push()” vs “a” 标签
问题描述
新手在这里,对不起,如果这是一个非常基本的问题,但我无法理解应该遵循哪种技术来浏览各个页面。
到目前为止,我知道三种不同的方法可以实现这一目标:
- 导出的链接组件
next/link
router.push()
使用 useRouter 导出 ny next/router- 简单的 HTML
<a></a>
<Link href="/about"><a>About me</a></Link>
<a href="/about">About me</a>
<button onClick={() => router.push("/about")}>About me</button>
所有方法都有效并实现了相同的目标。我只是想知道这些方法之间有什么区别(如果有的话)。非常感谢您!
解决方案
路由器.push
router.push('/push')
行为类似于 window.location。它不会创建<a>
标签,这意味着 - 如果您关心 SEO,爬虫将不会检测到您的链接。
<Link>
但是,<Link>
会创建一个<a>
标签,这意味着当爬虫抓取您的网站时,您的链接将被检测到。最终用户仍将在不重新加载页面的情况下进行导航,从而创建单页应用程序的行为。
<a>
<a>
不使用 next/link 的标签<Link>
会创建一个标准的超链接,将最终用户引导到 url 作为新页面。(标准行为)。
您应该在<Link>
整个网站中使用 router.push,并在需要重定向的地方使用 router.push 以保留单页应用程序的行为。
推荐阅读
- python - 将整数和浮点数打包到 bytearray 以通过套接字发送
- spring - Spring:使用 InputStreamResource 发布请求
- java - 如何更改Jpanel的背景颜色
- c# - 使用 HTTP_X_FORWARDED_FOR 获取当前客户端 IP 地址?
- android - 转换 java 文件 - 默认情况下总是使参数可以为空
- java - 如何限制 GITLAB 中特定文件夹的拉取操作?
- java - JAVA :: 将 List object1 复制到 list object2,其中两个对象具有相同的变量
- nullreferenceexception - NullReferenceException epplus Parallel.For
- ios - 如何使用其他系统图标?
- coldfusion - 需要创建一个带有分隔符的字符串数组的树状结构