Closed13

React router dom v6についてのメモ

CODE-EGGCODE-EGG

BrowserRouterで囲まないと利用できない

    <BrowserRouter>
      <App />
    </BrowserRouter>
CODE-EGGCODE-EGG

基本形

Routeのelement propにjsxエレメントを渡し、path一致したらレンダリングされる。
基本的にはこれだけ

    <BrowserRouter>
        <Routes>
          <Route path="/" element={<Login />} />
          <Route path="/signin" element={<Signin />} />
        </Routes>
    </BrowserRouter>
CODE-EGGCODE-EGG

exact propsはなくなり、常に完全一致によるルーティングがされるようになった

任意のパスにはアスタリスクを利用する

 <Route path="/home/*" element={<Login />} />
CODE-EGGCODE-EGG

<Routes>のchildrenの<Route>の順番は気にする必要はない。v5では気にする必要があったがv6では先にpathに一致したからレンダリングとはならない。

CODE-EGGCODE-EGG

Routerをネストすることができる。
このようにすることで、
/homeコンポーネントの中に/home/signinの内容を描画することができる。(相対パスで記述できる)

    <BrowserRouter>
        <Routes>
          <Route path="/home/*" element={<Home/>} />
              <Route path="signin" element={<Signin />} /> // home/signinになる。
          <Route/>
        </Routes>
    </BrowserRouter>
CODE-EGGCODE-EGG

homeコンポーネントのどこにsigninを描画するかは、<Outlet/>コンポーネントをHomeコンポーネントでimportして指定する

const Home = () => {
  <div>
     <Outlet/>// ここにSigninコンポーネントが描画される
  </div>
}
CODE-EGGCODE-EGG

<Link>コンポーネントでクリック遷移することができる。

<Link to="home">クリック</Link>
CODE-EGGCODE-EGG

Linkではなく命令的に遷移するにはuseNavigate()を利用する。v5ではuseHistoryだった。

const navigate = useNavigate();

navigate("/home",);
CODE-EGGCODE-EGG

Promptというコンポーネントはなくなった?
ナビゲーションを止めたりする処理は独自で実装する必要がある。

このスクラップは2022/08/28にクローズされました