みかづきブログ・カスタム

基本的にはちょちょいのほいです。

Next.jsでnext/linkを使ってハッシュを変更した時にhashchangeが発火しない 🔥

f:id:kimizuka:20210103011013j:plain

<Link href="#hash"> hashchange </Link>

というリンクをクリックしてhashを変化させた時、

window.addEventListener('hashchange', () => {
  console.log('hashchange!');
});

と、設定したハッシュチェンジイベントが発火せずにとても困っていました。

※ next 10.1.3にて確認

手っ取り早い解決策として、

<a href="#hash">hashchange</a>

か、

<a onClick={ () => location.hash = 'hash' }> hashchange </a>

という感じでaタグに置き換えたら無事に動作するようになりました。

Nuxt.jsでも同じことが起こったので、そういう仕様なのかもしれないです。
そもそも、内部的にはpushStateを使ってそうですし。

blog.kimizuka.org

このissueをみるに、やはりpushStateを使っているのでhashchangeイベントは使えないみたいですね。

github.com