昨日エラーを起こす前に成功した部分である”プロフィールのアクションと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を使ってみよう