100日目(達成!):ダッシュボードとプロフィールの管理:Protected Routeの作成(PrivateRoute)

今回は新しくProtectedRoute(PrivateRoute)の作成方法を学びました。actionを使って全てのデータをfetchし、そのデータをRedux stateへ持っていき、それを他のcomponents(例:education componentやexperience component)に渡す、ということだそうです。

今日はuseEffectのエラー表示対策に苦戦したため、その部分で時間を費やしました。

そして、遂に目標としていた100日を達成して、嬉しいような、まだまだスタートラインにいるだけのような両方の気持ちです。淡々と101日目もスタートして、学習し続ける予定です。

①src/components/dashboard/Dashboard.js を作成。useEffectのエラーに苦戦(とりあえず応急処置)

import React, { useEffect } from "react";
import PropTypes from "prop-types";
import { connect } from "react-redux";
import { getCurrentProfile } from "../../actions/profile";

const Dashboard = ({ getCurrentProfile, auth, profile }) => {
  // eslint-disable-next-line
  useEffect(() => {
    getCurrentProfile();
  }, []);

  return <div>Dashboard</div>;
};

Dashboard.propTypes = {
  getCurrentProfile: PropTypes.func.isRequired,
  auth: PropTypes.object.isRequired,
  profile: PropTypes.object.isRequired
};

const mapStateToProps = state => ({
  auth: state.auth,
  profile: state.profile
});

export default connect(
  mapStateToProps,
  { getCurrentProfile }
)(Dashboard);

 

8行目のuseEffectがエラーとなってしまい、とりあえず //eslint-disable-next-line を前の行に書いて応急処置をしました。まだ良い解決方法が見つかっていないのですが、もしかすると後々のレクチャーで解決できるのかもしれません。

(Q&Aコーナーによると、同じエラーになった人が多かったようです。)

② App.jsにPrivaceRouteについてのコードを書き足す

App.jsは膨大なファイルになってきたので、今回書き足したコードのみまとめます。

import PrivateRoute from "./components/routing/PrivateRoute";

 

そして、const Appの部分のSwitch内にPrivateRouteと書き足しました。他のRouteと違うのはPrivateがついているということです。

const App = () => {
  useEffect(() => {
    store.dispatch(loadUser());
  }, []);

  return (
    <Provider store={store}>
      <Router>
        <Fragment>
          <Navbar />
          <Route exact path='/' component={Landing} />
          <section className='container'>
            <Alert />
            <Switch>
              <Route exact path='/register' component={Register} />
              <Route exact path='/login' component={Login} />
              <PrivateRoute exact path='/dashboard' component={Dashboard} />
            </Switch>
          </section>
        </Fragment>
      </Router>
    </Provider>
  );
};

 

③src/componentc/routing/PrivateRoute.jsファイルを作成。

PrivateRoute.jsファイルを作成して、ユーザーがAuthenticatedであれば/loginページにリダイレクトする仕様になっています。

import React from "react";
import { Route, Redirect } from "react-router-dom";
import PropTypes from "prop-types";
import { connect } from "react-redux";

const PrivateRoute = ({
  component: Component,
  auth: { isAuthenticated, loading },
  ...rest
}) => (
  <Route
    {...rest}
    render={props =>
      !isAuthenticated && !loading ? (
        <Redirect to='/login' />
      ) : (
        <Component {...props} />
      )
    }
  />
);

PrivateRoute.propTypes = {
  auth: PropTypes.object.isRequired
};

const mapStateToProps = state => ({
  auth: state.auth
});

export default connect(mapStateToProps)(PrivateRoute);

 

現在使用している教材と学習時間:本日の学習時間2.5時間

Udemy:MERN Stack Front To Back: Full Stack React, Redux & Node.js by Brad Traversy

★Section9:Dashboard & Profile Management

-Lec 44 Protected Route For Dashboard (このブログ記事に書いた内容)

-Lec 45 Profile Reducer & Get Current Profile (ここまで完了。)

進捗状況:63%

学習時間2.5時間

~本日は休みにしている教材~

Udemy:The Complete Web Developer: Zero to Mastery by Andrei Neagoie

進捗状況: 92%

★参考にした本★

「React.js & Next.js超入門」掌田津耶乃 (秀和システム)

Section4-1: Reduxを使ってみよう

★参照記事★

Quiita参照記事⇒[axios] axios の導入と簡単な使い方

関連キーワード
  • 131日目~134日目:Udemyで一番人気のGit (&GitHub) コースを修了!学習した内容・学習にかかった時間とおすすめ度をご紹介: Completed Git course by Udemy "Git Complete: The definitive, step-by-step guide to Git" by Jason Taylor: Highly recommended to both beginner & intermediate leaner
  • 121日目~130日目:Udemyで新しいReactコース学習とGit & GitHubのコースを受講し始める #100dayofcode Round 2
  • 120日目:プログラミング学習100日チャレンジの完了とこれからの学習&ブログ記事:100days of code completed & from now on
  • 119日目:完成したWebアプリケーションの公開(Devconnector deployed on Heroku)
  • 118日目:Udemy講座の感想口コミ&自分に合った講座の選び方ポイント:Mern Stack Front to Back: Full Stack React, Redux & Node.js by Brad Traversy
  • 117日目:完成!Herokuへのデプロイ成功:Heroku CLIのインストールからWebアプリデプロイまで。Herokuの使い方と、package.jsonとgitコマンドではまったところと解決方法
おすすめの記事
101日目:Dashboard作成とCreateProfile Componentの作成
プログラミング100日チャレンジ記録 #100daysofcode
Dashboard(ユーザーがログインした時に表示される画面)と、新たにプロフィールに追加する内容を記入できるCreateProfile C...