454 文字
2 分
ReactのRouterライブラリなどでパスの書き間違いから解放される方法
React の Router ライブラリなどでパスの書き間違いを防ぎたいと聞かれたので、いくつかの方法を提示した際のメモ。
-
ライブラリを利用する
- パスの書き間違いを防ぐことを目的としたライブラリは既にいくつかある。
-
パスを生成する関数や変数をページ毎に記述する。
-
Page コンポーネントのプロパティとして生やす実装
export const UserPage = () => {}UserPage.path = (id: string) => `/users/${id}`<Link href={UserPage.path(id)}>User</Link> -
React Router にある generatePath のような関数を利用する
export const userPagePath = "/users/:id";generatePath(userPagePath, { id: "42" });
-
-
Link コンポーネントなどのパスを利用する型を拡張する
-
パスを定義したオブジェクトを定義している場合
// React RouterのuseRoutesなどを想定const routes = [{ path: "/", element: <Dashboard /> },{ path: "team", element: <AboutPage /> },];// 実際はネストしたパスやパスパラメータを持ったパスがあるため、もっと複雑な型を書く必要があるdeclare module "react-router-dom" {export interface LinkProps extends ... {href: typeof routes[number]["path"]}}
-
-
パスを生成する関数や変数を解析して生成する
- pathpidaなどはこれ
-
TSServer を利用してパスを利用する型を拡張する
- Next.js の typedRoutes は恐らくこれ
-
書き間違いを許容する
- パスの追加や変更は開発初期を除いて滅多にあることではないため、(特にファイルを生成するためのコマンド実行が開発時に求められるような方法は)オーバーエンジニアリングであるという意見の人もいる。
-
パスの遷移を確認するテストを書く
- 網羅的に Link 毎のテストを書くのは不毛かもしれない
- CI で走らせるようにすれば開発時にコマンドを実行させられるより健全
ReactのRouterライブラリなどでパスの書き間違いから解放される方法
https://blog.ohirunewani.com/posts/react-router-library-path-typing/