1
1

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.

react-router-dom v6でログインしているユーザーだけがアクセスできるようにする(ネストにしても画面が変わらない)

Posted at

はじめに

Webサイトを作るのに必要なログイン部分に時間を使ったのでまとめていきます
react-router-dom v6に対応しています

問題

react-router-dom v6を利用しています
Recoil(useContext)でグローバルにisLoginというフラグを用意して、trueの時にはログイン済みとして、falseの時はログイン後の画面に直接アクセスするとログイン画面にリダイレクトするようにしたいです

解決方法

以下のように設定することで実現できました

Authenticated.tsx
import React from "react";
import { Outlet } from "react-router-dom";

export const Authenticated = () => {
  return (
    <>
      <Outlet />;
    </>
  );
};
router.tsx
      <Route
        path="/"
        element={
          isLogin ? <Authenticated /> : <Navigate to="/sign_in" replace />
        }
      >
        <Route index element={<Home />} />
        <Route path="setting" element={<Setting />} />
      </Route>

ポイントは<Outlet />を利用することでした
Routerでネストにしたときにネストしたコンポーネントが表示されるのは`と書いたところです
これを書かないとネストしても画面が変わらないという現象が起きるので注意が必要です

なので、の箇所がURLによって切り替えられるようにしました

ログインしているユーザーだけがアクセスできるようにする仕組みはelementの箇所で3項演算することで制御しています

おわりに

思ったよりも実現に時間がかかりました
誰かの参考になればと思います

参考

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?