Upgrade to Pro — share decks privately, control downloads, hide ads and more …

mini-router

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for Tenplant Tenplant
May 16, 2026
1

 mini-router

大LT 2026 春 in Aizuでの発表ログ

Avatar for Tenplant

Tenplant

May 16, 2026

Transcript

  1. Grand Lightning Talk 2026 Spring in Aizu Mini React Router

    Navigation API・View Transitions・React Activityを使って、History API時代のSPA Routerを再実装してみた。 松本 天獅 The University of Aizu / 3rd year PROFILE 会津大学 3年 WHAT I DO Mainly Web FIND ME @tenplant1203
  2. 自己紹介 HN 名前 学年 出身 趣味 Twitter / Github Tenplant

    天獅 松本 学部3年 札幌 キャンプ, ゲーム, Web (@)tenplant1203 Chilling me in Lack Inawashiro Camp
  3. 今回実装したもの React + Vite + TSで小さなrouter libraryを作った。 https://github.com/Tenplant1203/browser-native-router Route Matching

    Rendering Abort / Race Control 今回通常のrouterに加えて実装したもの Navigation API View Transition URLに対応するrouteを探す 連続navigation時に古いloaderを 中止する matchしたrouteのComponentを Outletで描画する route変更時の画面遷移を 滑らかにする (Web Baseline 2025) Data Loading routeごとのloaderを実行し、 Componentへdataを渡す browser navigationをnavigate eventから扱う (Web Baseline 2026)
  4. Abort / Race Control Navigationの競合を防ぐ Link 1をクリック Link 1のdataを取得 abort(中止)

    Link 1のdataの取得完了 abort(中止) Link 1を表示 id !== currentId abort signal Link 2をクリック Link 2のdataを取得 Link 2のdataの取得完了 Link 2を表示
  5. 従来: CSS, JS animation 以前までは CSS transition 従来のCSS transitionは、「同じDOM要素の変化」は得意。 CSS

    animation Javascript animation などで実装されていた クリック前 https://ja.react.dev/learn/lifecycle-of-reactive-effects クリック後
  6. 今回のアプローチ: View Transition API View Transition API:
 ブラウザが更新前後の見た目をsnapshotする。 ページ遷移 snapshot!!!

    結果:
 route変更のような大きなUI更新でも、
 前の画面 → 次の画面 のtransitionを作りやすくなる。
  7. History APIからNavigation APIへ 従来:
 clickを拾う → preventDefault → pushState →

    popstate監視 Navigation API:
 browser navigationをnavigate eventとして受け取る よくなった点: navigationをの入口をブラウザ側に寄せることができる。 interceptできる遷移だけRouterで扱える リンクのクリック / ページを戻る / 進むを同じnavigation lifecycleとして見やすくなる History API fallbackと併用できる
  8. 今回で何を学んだ? Routerを見る目が変わった。 Before: URLに応じてComponentを出す仕組み After: URL・Data・UI・Transitionを繋ぐnavigation lifecycleの管理層 実装してわかったこと loader /

    abort / transitionは別々ではなく, 1つの遷移に関係している 古いnavigationを止めないと, dataの上書きが起きる Reactの更新タイミングとBrowser APIの接続は難しい Router libraryが隠している複雑さを理解できた