ByteNoteByteNote
站内用组件,站外用锚点
字

字节笔记本

2026年10月7日 · 约 6 分钟读完

站内用组件,站外用锚点

API中转
¥120

站内换页用 Link,站外地址用原来的 a。Link 从 next/link 引进。样本把文字“关于我们”放在组件里面,href 是 /about。点击由脚本接住,浏览器不会把整页再请求一次。

站内路径走 Link,外链仍用 a

点击之后发生的事不同

普通 a 的点击会按 href 做一次文档导航。当前页的脚本状态丢掉,新文档从头加载。Link 的点击改走应用内的路由。地址栏会变,整页的文档请求不会按传统链接那样重来。对话把这叫做客户端路由,并认为这样更快。

默认情况下,链接进入视口就会去预取目标页的脚本。还没点,代码已经在准备。预取由 prefetch 控制。不需要预取时把这个属性关掉,而不是改回 a。改回 a 会同时失去站内路由。只想少一次预取,就动 prefetch。

脚本按路由拆开。当前页没走到的页面,不会在第一次打开时全部下载。Link 指向哪一页,就和那一页的拆分结果连在一起。手写 a 再配一段自己的点击拦截,容易只做了地址变更,没有做这份拆分和预取。

路径和内外之别

对话还写了,Link 会处理应用内路径,包括开发和生产在基础路径上的差别。样本只有 /about 这一个路径,没有演示基础路径的配置项。有前缀时,不要在 href 里手写一套、又在配置里写一套。以框架按环境解析的结果为准。

应用内的地址用 Link。别的站点、邮件、文件下载这类要离开本应用的地址,用 a。把外链放进 Link,预取会去请求一个不属于本应用的页面脚本。把站内路径写成 a,每次点击都是整页刷新,预取也不会发生。导航组件里两种标签可以同时存在,按 href 是否离开本站来选,不要整份导航只用一种。

样本没有在 Link 里面再套一层 a。有的版本文档要求里面再放 a,有的版本由 Link 自己渲染链接。对话的例子是文字直接作为子节点。跟你锁定的版本对一下。两套都写上,渲染出来会是链接里再套链接,或子节点不符合类型。

预取用 prefetch 关,不要改回 a

先分清这次点击要不要离开站点

要留下应用内的状态和预取,用 Link,href 写站内路径。要离开站点,用 a。视口里的预取是默认行为,用 prefetch 调整。不要为了少一次请求把站内链接全部换成 a。也不要为了统一标签把外链全部换成 Link。

站内的关于我们指向斜杠 about。点击之后地址变化,文档不整页重来,这是 Link 和普通锚点的差别。锚点每次都按地址要一份新文档,内存里的状态跟着文档一起丢掉。若这次导航本来就要离开站点,这种丢掉是对的,应该用锚点。若还要留在应用里,用 Link。

预取发生在链接进入视口时,不是发生在点击时。列表很长时,视口里每一条站内链接都可能去取脚本。不需要这么积极时,关掉预取属性,链接仍然是站内路由。不要用换成锚点的办法来省预取,那会把路由也换成整页刷新。外链不要放进 Link,否则预取会向别的站点要一份本应用的页面脚本,既浪费也会失败。

样本的子节点是文字,没有内层锚点。版本若要求内层锚点,就按该版本文档加一层,并且不要再让外层也渲染成锚点。版本若已经由组件自己渲染锚点,再套一层会得到嵌套链接。不确定时先看锁定版本的类型定义,而不是两套都留下。基础路径只写在环境配置里。href 保持站内的绝对路径形式,像样本那样从斜杠开始。不要在每个链接上再拼一遍前缀。

站内的关于我们用组件来写,地址从斜杠开始。点击之后地址会变,但不会把整份文档重新请求回来。 还没提交的输入和滚动位置因此还留在当前文档里。这是组件和锚点的实际差别,不只是感觉更快。 普通锚点的点击会按地址要一份新文档。当前页里的临时状态会跟着文档一起丢掉。 默认在链接进入视口时预取目标页的脚本。列表很长时,这种提前的请求会明显变多。 想减少预取,就关掉对应属性。关掉之后,站内点击仍然应该走组件,而不是变成整页刷新。 不要用把站内链接换成锚点的办法来省预取。那会把整页刷新和状态丢失一起带回来。 离开本站的地址用锚点。放进组件的话,预取会向别的主机要本应用的页面脚本。 站内地址若误用锚点,每次点击都是新文档。状态需要自己另外保存,组件导航则不必。 导航里两种标签按目的地同时存在。不要为了看起来整齐,把外链和站内链接写成同一种。 基础路径放在环境配置里。链接保持从斜杠开始的写法,不要在每一条上再拼一遍前缀。 样本的子节点是文字,没有内层锚点。版本要求内层锚点时只加一层。版本已经自己渲染锚点时不要再加。 两种要求叠在同一个组件上,会得到链接里面再套链接,或者子节点的类型对不上。 不确定时先看锁定版本的说明,而不是两套写法都留在代码里。 验收时看网络记录里有没有整页文档请求。没有,说明走的是组件。有,说明仍是锚点。 预取的记录出现在点击之前。预取失败只应留下记录,不应该把点击改成整页刷新来绕过。 环境里的基础路径变更之后,再点一次关于我们,确认仍然落在应用里面。 这条关于我们只用来验收站内导航,不要同时再写一条锚点指向同一个地址。 整页刷新时滚动和未提交输入会丢。若站内跳转后这些还在,就可以确认没有走锚点。 外链验收看主机是否离开本站。离开了就应该是锚点,并且不要给它加站内才会有的预取。 预取属性关掉之后再点一次。路由方式应不变,只是点击之前的提前请求变少。 子节点先保持文字。只有文档要求内层锚点时才加,加完检查渲染结果只有一层可点击的链接。 基础路径不要写进每一条地址。配置改了,所有从斜杠开始的链接一起生效。 组件点击失败时先看是不是误写成了锚点,而不是先关掉预取。预取和导航方式是两件事。 列表页链接很多时,先关预取再观察请求数。不要为了请求数把整份导航改成锚点。 站外地址放进组件,预取会打到别人的主机。这类失败不能靠重试站内路由来解决。 点完关于我们再点一条外链。两次点击的标签不同,文档请求也不同,这就是验收要看到的差别。

相关文章

分享: