遷移を作る

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

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

押して移るのは Link

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

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

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

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

処理のあとに移るのは useNavigate

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

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 にして、出品したあと一覧へ送ります。

ヒント

App.tsx
App.tsx
プレビュー

できているか

  • 商品一覧のナビが Link になっている
  • 出品するを押すと出品ページに移る
  • 商品名を入れて送ると、一覧へ移る