先程の続きで、Profile Reducerの作成とユーザーの現在のprofileをgetする、ということを行いました。Profile Reducer & action 仕様で、バックエンドにリクエストを行い、componentsを通じてデータを送る、ということが目的です。
①新しくsrc/reducers/profile.jsファイルを作成する
プロフィール情報をgetできるよう、新しいファイルprofile.jsをreducers内に作成しました。
profiles(複数)の部分が[] (空欄のブラケット)になっているのは、リストとして表示するためです。
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についての情報を書き足しました。
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できるようコードを書き足します。この作業はルーティン化しているので慣れてきました。
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で応急処置をしています。(後ほど外す予定)
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 の導入と簡単な使い方