106日目①:プロフィールのアクションとReducerを完成させる

昨日エラーを起こす前に成功した部分である”プロフィールのアクションとReducerを追加して完成させたところまで”をまとめます。

アクションのprofile.jsに追加したのは、3つのことです。

1つ目が、全てのプロフィールを取得(Get all profiles)、GitHubのレポジトリの取得(Get GitHub Repos)、そして、プロフィールをIDで取得(Get profile by Id)です。

その後、types.jsへアクションの追加、Reducersのprofile.jsにも追加コーディングを行いました。

①client/src/actions/profile.js 3つのアクションを追加

まずは、import部分に新しいアクションを追加していきます。今回追加したのは、GET_PROFILES(以前書いたGET_PROFILEとは異なり複数形)とGET_REPOS(GitHubのレポジトリ取得)です。

import {
  GET_PROFILE,
  GET_PROFILES,
  PROFILE_ERROR,
  UPDATE_PROFILE,
  CLEAR_PROFILE,
  ACCOUNT_DELETED,
  GET_REPOS
} from "./types";

そして、先程も書いたように、3つのアクションを追加しました。

// Get all profiles
export const getProfiles = () => async dispatch => {
  dispatch({ type: CLEAR_PROFILE });
  try {
    const res = await axios.get("/api/profile");

    dispatch({
      type: GET_PROFILES,
      payload: res.data
    });
  } catch (err) {
    dispatch({
      type: PROFILE_ERROR,
      payload: { msg: err.response.statusText, status: err.response.status }
    });
  }
};

// Get profile by ID
export const getProfileById = userId => async dispatch => {
  try {
    const res = await axios.get(`/api/profile/user/${userId}`);

    dispatch({
      type: GET_PROFILE,
      payload: res.data
    });
  } catch (err) {
    dispatch({
      type: PROFILE_ERROR,
      payload: { msg: err.response.statusText, status: err.response.status }
    });
  }
};

// Get Github repos
export const getGithubRepos = username => async dispatch => {
  try {
    const res = await axios.get(`/api/profile/github/${username}`);

    dispatch({
      type: GET_REPOS,
      payload: res.data
    });
  } catch (err) {
    dispatch({
      type: PROFILE_ERROR,
      payload: { msg: err.response.statusText, status: err.response.status }
    });
  }
};

 

②client/src/actions/types.jsにGET_PROFILESとGET_REPOSを追加

export const GET_PROFILES = "GET_PROFILES";
export const GET_REPOS = "GET_REPOS";

③client/src/reducers/profile.js

まずは、importに先程と同じようにGET_PROFILESとGET_REPOSを追加しました。

import {
  GET_PROFILE,
  PROFILE_ERROR,
  CLEAR_PROFILE,
  UPDATE_PROFILE,
  GET_PROFILES,
  GET_REPOS
} from "../actions/types";

その後、switch~caseの部分にそれぞれ追加です。

const initialState = {
  profile: null,
  profiles: [], //profile listing page
  repos: [], //Github repos
  loading: true,
  error: {}
};

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

  switch (type) {
    case GET_PROFILE:
    case UPDATE_PROFILE:
      return {
        ...state,
        profile: payload,
        loading: false
      };
    case GET_PROFILES:
      return {
        ...state,
        profiles: payload,
        loading: false
      };
    case PROFILE_ERROR:
      return {
        ...state,
        error: payload,
        loading: false
      };
    case CLEAR_PROFILE:
      return {
        ...state,
        profile: null,
        repos: [],
        loading: false
      };
    case GET_REPOS:
      return {
        ...state,
        repos: payload,
        loading: false
      };

    default:
      return state;
  }
}

ここまでが、昨日エラーを起こさず上手くコーディングできた部分です。(コードの中にメモを残している部分はいずれ消すかもしれません。)

現在使用している教材と学習時間:(昨日の復習)
Udemy:MERN Stack Front To Back: Full Stack React, Redux & Node.js by Brad Traversy

★Section10:Profile Display

-Lec 53 Finish Profile Actions & Reducer(このブログ記事の内容です。)

-Lec54 Display Profiles (開発者=developersのプロフィールを表示するページの作成。ここでクラッシュしてしまったので本日今からdebug予定)

-Lec 55 Addressing The Console Warnings (ここまでの講座でエラーが出ている箇所を修正。ここはOK)

進捗状況:76%

★参考にした本★

「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...