3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ReactRouter v6のSwitch⇒Routesでハマったときの解決法

Last updated at Posted at 2022-01-22

#React Routerのv6を使ってみました

React Router(react-router-dom)を使ってルートパスにログインページ<Login />を置きたい場合、v5まではこんな感じで書いていた。

v5の場合
    <Switch>
       <Route exact path="/">
         <Login />
       </Route>
    </Switch>

しかし、v6の場合Switchが見つからない・・・
#そもそもSwitchがRoutesに変わったらしい
そしてexactもなくなったらしい。v6ではすべて完全一致になるとのこと。
部分一致にしたい場合は"/*"みたいにワイルドカードを指定してあげればいいみたい。
まあここまではいい。

Routesに変更
    <Routes>
       <Route path="/">
         <Login />
       </Route>
    </Routes>

これでいいかなと思いきや、なぜか表示されない・・・
デベロッパーツールでコンソールを覗くと、なにやらエラー吐いとる。

Uncaught Error: [undefined] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>

もしかして、<Login />がundefinedって言ってる?
調べてみるとこの書き方は出来ないっぽい。

#子ノードに入れるのではなく、element属性に突っ込むとok

v6の場合
    <Routes>
       <Route path="/*" element={<Login />} />
    </Routes>

上記で解決。やっとログインページが見えました。
element属性に突っ込んでやる必要がありました。
すごいシンプルで見やすいかも。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?