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

TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are y...

TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?

2024/11/16:
TSKaigi Kansai 2024
https://kansai.tskaigi.org/

TanStack Routerに移行するのかい しないのかい、どっちなんだい!

清水 那音也
ソフトウェアエンジニア

株式会社カミナシ

November 15, 2024
Tweet

More Decks by 株式会社カミナシ

Other Decks in Technology

Transcript

  1. ルーティングで行っていること 1.Path Params http://example.com/blogs/1 2.Search Params http://example.com/blogs?filter=hoge 3.State Value (of

    the location) URL間での内部状態の受け渡し カミナシ帳票の現在 TanStack Routerに 移行したい! ルーティング - React Router v6 データフェッチ - TanStack Query
  2. データ受け渡しとTanStack RouterのAPI 1.Path Params - useParams const postId = useParams({

    from: '/posts/$postId', select: (params) => params.postId, }) 2.Search Params - useSearch const selected = useSearch({ from: '/posts/$postId', select: (search) => search.postView, }) // ^ string
  3. 3.State Value (of the location) URL間での内部状態の受け渡しが 型安全ではない ※1 const navigate

    = useNavigate(); navigate( { to : '/user', state : { user : someUserData } } ); const location = useLocation(); const user = location.state.user; //Type Safeではない ※1https://github.com/TanStack/router/discussions/284
  4. declare module '@tanstack/react-router' { interface Register { router: typeof router;

    } interface HistoryState { post?: { id: string; name: string }; } } const navigate = useNavigate(); navigate({ to: '/posts/$postId', params: { postId } state: {{ post: { id: '123'; name: 'foo' } }} }) 型をつけるには HistoryState を拡張する
  5. 私: TanStack Router V2でルート間の型付 きstate渡しが導入されると嬉しいな※4 Tanner:We could totally do that.

    実際に聞いてみた ※4 https://github.com/TanStack/router/discussions/975#discussioncomment-10413562
  6. 結論 State受け渡しが型安全になったら TanStack Routerに移行する (=typed state per routeが入ったら) そのためにできること -

    あらかじめV2に備えたコードにしておく※5 - 欲しい機能であれば+1する※6 - 自分で実装してPull Requestを出す ※5 https://github.com/TanStack/router/discussions/975 ※6 https://github.com/TanStack/router/discussions/284#dis cussioncomment-9344482