Issue
Next.jsのDynamic Routesを使っているページに対して普通にnext/link
の<Link>
を使ってリンクを貼ると、遷移時にブラウザのロードが発生してしまってSPA遷移にならない。
最初、Next.jsじゃなくてReactの何かがおかしい?と思って軽くハマった。
import Link from 'next/link'
// これだとブラウザロードが発生してしまう
<Link href={`/posts/${post.id}`}>リンク</Link>
Solution
ドキュメントを見ると、next/link
の<Link>
にはas
属性というのが用意されており、「ブラウザのURLバーでレンダリングされるパスを示すもので、Dynamic Routesで使ってください」と書いてある。
じゃあhref
は何なのかと言うと、「pages
ディレクトリの内部のパスです」とのこと。
要するに、例えばDynamic Routesでpages/posts/[post-id].jsx
としている場合は下記のように書けば良いらしいです。
import Link from 'next/link'
<Link href="/posts/[post-id]" as={`/posts/${post.id}`}>リンク</Link>
as
の方に普段href
に書いているような具体的なパスを書くんですね。何か違和感。。。