97日目:Redux概要を復習&Redux devtools extension動く& Auth ReducerとRegister Action作成

昨日色々と上手くいかなかったので、本日は復習のみで終わるかと思ったのですが、ユーザーauthenticationのセクションを進めることができました。

まずは、昨日「わからない」と思っていたReduxの全体的な概要とdispatchの定義について掌田津耶乃さんの本「React.js & Next.js」で学びました。Udemyの講座を進める前にこの本を先に学習した方が良かったと改めて思いました。

次は、昨日からの問題「Redux devtools extensionが動かない」ということについてです。昨日分のUdemy講座を全て見直したところ、私が書いたコードに間違いはありませんでした。今日Redux devtools extensionを起動してみたところ…動く…。もしかすると、昨日も再起動すれば良かったのかもしれません。

最後に、次のセクションに進んで、React User Authenticationを行っていくために、reducersやactionsフォルダにauth.jsを作成していくというコーディングを行いました。

少しでも進んで、久々に満足の一日です。

Reduxの全体的な概要とdispatchの定義について(参照:掌田津耶乃さんの本「React.js & Next.js」)

①Reduxは「状態管理」ツールである。Reactではコンポーネントの状態を個別に扱っていたが、Reduxでは統合して管理する昨日がある。

②すべてのデータは「ストア」で保管する。アプリケーションごとに1つのみ用意する。(保管されている値は「ステート(state)」と呼ばれる

③値は読み取り専用であり、書き換え不可(だが、変更はできる。)

④ストアの書き換えはできないが、簡単な関数で変更することはできる。

Reduxの仕組み

ストア:データを保管し管理する。データの値はステート(state)と呼ぶ。

プロバイダー:ストアを他のコンポーネントに受け渡す仕組み

レデューサー:ストアに保管されるステートを変更するための仕組み

ディスパッチ:レデューサーを呼び出し値を操作するための機能

 

Redux使用時の全体の流れ

①ステートを準備する⇒②レデューサーを準備する⇒③ストアを準備する

その後で、

④ディスパッチ(dispatch)を呼び出す⇒⑤レデューサーが呼び出される⇒⑥アクションのtypeで処理を分岐

する、という流れです。実際の関数などについては本の中で一つ一つ丁寧に説明されていました。とてもわかりやすいので、こちらの本のアプリを先に作りたい気持ちがムクムクと湧いてきたのですが、まずは概要の学習のみを行いました。あと5回ぐらい読んでしっかり理解する予定です。

Redux devtools extensionが使えるようになった

最初にも書いたのですが、今日になって突然Redux devtools extensionが使えるようになっていました。昨日はだいぶつまづいた感があったので、とりあえず再起動すればよかったなと思います。

起動して反応したのが嬉しかったため、本日のアイキャッチ画像はRedux devtools extensionの写真です。(スクショしようとすると画面が消えるため写真となりました。)

今回は、ユーザーの登録をするとtokenを見ることができたり、エラー表示もちゃんとできるということが確認できました。良い感じです。

次のセクションに進んでReact User Authenticationができるように作業した

Reduxの設定は問題なくできたということで、reducersとactionフォルダにauth.jsを作成しました。

reducers/auth.jsのコードはこちら。

import { REGISTER_SUCCESS, REGISTER_FAIL } from "../actions/types";

const initialState = {
  token: localStorage.getItem("token"),
  isAuthenticated: null,
  loading: true,
  user: null
};

export default function(state = initialState, action) {
  const { type, payload } = action;

  switch (type) {
    case REGISTER_SUCCESS:
      localStorage.setItem("token", payload.token);
      return {
        ...state,
        ...payload,
        isAuthenticated: true,
        loading: false
      };
    case REGISTER_FAIL:
      localStorage.removeItem("token");
      return {
        ...state,
        token: null,
        isAuthenticated: false,
        loading: false
      };
    default:
      return state;
  }
}
actions/auth.jsのコードはこちらです。
import axios from "axios";
import { setAlert } from "./alert";
import { REGISTER_SUCCESS, REGISTER_FAIL } from "./types";

//Register User
export const register = ({ name, email, password }) => async dispatch => {
  const config = {
    headers: {
      "Content-Type": "application/json"
    }
  };

  const body = JSON.stringify({ name, email, password });

  try {
    const res = await axios.post("/api/users", body, config);

    dispatch({
      type: REGISTER_SUCCESS,
      payload: res.data
    });
  } catch (err) {
    const errors = err.response.data.errors;

    if (errors) {
      errors.forEach(error => dispatch(setAlert(error.msg, "danger")));
    }

    dispatch({
      type: REGISTER_FAIL
    });
  }
};
本を読んだおかげで、
自分がどのような関数を書いて操作していくのか全体的なイメージがつかめました。
昨日分のUdemy講座の動画(Redux Setup & Alerts)も全て見直したので復習できて良かったです。

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

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

★Section7: Redux Setup & Alerts(復習)

-Lec 37 Creating a Redux Store

-Lec 38 Alert Reducer, Action & Types

-Lec 39 Alert Component & Action Call (復習完了)

★Section8:React User Authentication

-Lec40 Auth Reducer & Register Action

進捗状況:56%

学習時間3.0時間

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

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

進捗状況: 92%

★参考にした本★

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

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




関連キーワード
  • 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...