100日目②: Profile Reducerの作成とCurrent ProfileをGetする

先程の続きで、Profile Reducerの作成とユーザーの現在のprofileをgetする、ということを行いました。Profile Reducer & action 仕様で、バックエンドにリクエストを行い、componentsを通じてデータを送る、ということが目的です。

①新しくsrc/reducers/profile.jsファイルを作成する

プロフィール情報をgetできるよう、新しいファイルprofile.jsをreducers内に作成しました。

profiles(複数)の部分が[] (空欄のブラケット)になっているのは、リストとして表示するためです。

  1. import { GET_PROFILE, PROFILE_ERROR } from "../actions/types";
  2. const initialState = {
  3. profile: null,
  4. profiles: [], //profile listing page
  5. repos: [],
  6. loading: true,
  7. error: {}
  8. };
  9. export default function(state = initialState, action) {
  10. const { type, payload } = action;
  11. switch (type) {
  12. case GET_PROFILE:
  13. return {
  14. ...state,
  15. profile: payload,
  16. loading: false
  17. };
  18. case PROFILE_ERROR:
  19. return {
  20. ...state,
  21. error: payload,
  22. loading: false
  23. };
  24. default:
  25. return state;
  26. }
  27. }
import { GET_PROFILE, PROFILE_ERROR } from "../actions/types";

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

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

  switch (type) {
    case GET_PROFILE:
      return {
        ...state,
        profile: payload,
        loading: false
      };
    case PROFILE_ERROR:
      return {
        ...state,
        error: payload,
        loading: false
      };
    default:
      return state;
  }
}

 

②src/reducers/index.jsへコードを書き足す

profileについての情報を書き足しました。

  1. import { combineReducers } from "redux";
  2. import alert from "./alert";
  3. import auth from "./auth";
  4. import profile from "./profile";
  5. export default combineReducers({
  6. alert,
  7. auth,
  8. profile
  9. });
import { combineReducers } from "redux";
import alert from "./alert";
import auth from "./auth";
import profile from "./profile";

export default combineReducers({
  alert,
  auth,
  profile
});

 

③src/actions/types.jsへコードを書き足す

types.jsにも、GET_PROFILE, PROFILE_ERRORをexportできるようコードを書き足します。この作業はルーティン化しているので慣れてきました。

  1. export const GET_PROFILE = "GET_PROFILE";
  2. export const PROFILE_ERROR = "PROFILE_ERROR";
export const GET_PROFILE = "GET_PROFILE";
export const PROFILE_ERROR = "PROFILE_ERROR";

 

④src/actions/profile.jsという新しいファイルを作成

actionsにprofile.jsファイルを作成しました。こちらも3行目のsetAlertの部分でエラーが出てしまったので、//eslint-disable-next-lineで応急処置をしています。(後ほど外す予定)

  1. import axios from "axios";
  2. // eslint-disable-next-line
  3. import { setAlert } from "./alert";
  4. import { GET_PROFILE, PROFILE_ERROR } from "./types";
  5. // Get current users profile
  6. export const getCurrentProfile = () => async dispatch => {
  7. try {
  8. const res = await axios.get("/api/profile/me");
  9. dispatch({
  10. type: GET_PROFILE,
  11. payload: res.data
  12. });
  13. } catch (err) {
  14. dispatch({
  15. type: PROFILE_ERROR,
  16. payload: { msg: err.response.statusText, status: err.response.status }
  17. });
  18. }
  19. };
import axios from "axios";
// eslint-disable-next-line
import { setAlert } from "./alert";

import { GET_PROFILE, PROFILE_ERROR } from "./types";

// Get current users profile
export const getCurrentProfile = () => async dispatch => {
  try {
    const res = await axios.get("/api/profile/me");

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

 

最後にlocalhostとRedux devtools extensionで動作確認したのですが、全て問題なく動いたのでOKとしました!(Git Bashの方はcomplied with warningなのでまだまだ対策が必要そうです。)

現在使用している教材と学習時間:本日の学習時間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...