コース一覧
React Routerとアプリ設計
遷移を作る

React Routerとアプリ設計

React Router、Routes・Route・Link、URLパラメータ、検索条件、404、見た目と機能の分離、合成、機能別フォルダを扱う全18レッスンのアプリ設計コースです。fleamaを商品一覧・詳細・出品・カート・マイページを持つ複数ページSPAとして完成させます。

1
ルーティング(React Router v7)
01. ルーティング導入15分
02. RoutesとRoute15分
03. 遷移を作る15分
04. URLパラメータ15分
05. 検索条件をURLに15分
06. 404ページ15分
07. つくる - ページ分割完了20分
08. 第7章クイズ15分
2
コンポーネント設計パターン
01. 見た目と機能の分離15分
02. 合成で組み立てる15分
03. 機能別フォルダ10分
04. つくる - 設計リファクタ20分
05. 第8章クイズ15分
3
総合制作
01. 購入フロー20分
02. マイページ20分
03. 仕上げ15分
04. 自由拡張20分
05. 完成と次のステップ10分

遷移を作る

Link と useNavigate の使い分け

押して移るか、勝手に移るか

ページを移る場面は2種類あります。利用者が押して移る場面と、処理が終わったのでアプリの都合で移す場面です。fleama なら、ナビの「商品一覧」を押すのが前者、出品ボタンを押して保存が済んだあと一覧へ送るのが後者です。この2つは書き方が違います。

押して移るのは Link

押して移るところには Link を使います。

TypeScript (JSX)

import { Link } from "react-router"; <Link className="to-items" to="/items">商品一覧</Link>

行き先は href ではなく to に書きます。画面には a タグとして出るので、右クリックから別のタブで開けますし、キーボードでも辿れます。押したときだけ React Router が横取りして、サーバーに行かずに部品を差し替えます。

移動を div の onClick で書いてしまうと、この良さが全部消えます。押して移るところは必ず Link です。

処理のあとに移るのは useNavigate

出品ボタンのように、押した瞬間ではなく処理が終わってから移る場面では、移動を命令として書きます。

TypeScript (JSX)

import { useNavigate } from "react-router"; function NewItem() { const navigate = useNavigate(); function handleSubmit(e: FormEvent<HTMLFormElement>) { e.preventDefault(); navigate("/items"); } }

useNavigate はフックなので、部品の中で呼びます。返ってくる navigate に行き先を渡すと、その場で移ります。

navigate(-1) と数を渡すと、ブラウザの戻るボタンと同じように1つ前に戻ります。

どちらを選ぶか

迷ったら、押した瞬間に移るなら Link、何かしてから移るなら useNavigate で分けてください。押すだけの移動を useNavigate で書くと、右クリックも新しいタブも効かない、押せるだけの飾りになります。

演習

ナビを Link にして、出品したあと一覧へ送ります。

ヒント

Link と useNavigate は react-router から読み込みます。読み込みを忘れると動きません

const navigate = useNavigate(); を部品の中の先頭で呼び、handleSubmit から使います

e.preventDefault() を消すと、ページごと送信されてしまいます。残したまま navigate を足します

App.tsx
プレビュー

できているか

  • 商品一覧のナビが Link になっている
  • 出品するを押すと出品ページに移る
  • 商品名を入れて送ると、一覧へ移る
  • useNavigate を使っている
  • ナビを Link で書いている
エディタを読み込んでいます