108日目①:プロフィールに経験と学歴を表示させる:Profile Experience & Education Display

ユーザーのプロフィール欄に経験と学歴を表示できるようにしました。まずは、client/src/components/profile/Profile.jsに必要な情報をコーディングしてから、ProfileExperience.js とProfileEducation.jsを同じフォルダ内に作成です。

①client/src/components/profile/Profile.jsの変更点と追加点

まず、始めに、これから作成するファイルをインポートします。

import ProfileExperience from "./ProfileExperience";
import ProfileEducation from "./ProfileEducation";
import ProfileGithub from "./ProfileGithub";

 

ProfileGuthub.jsについては次のレクチャーで作成。本日次のレクチャーまで学習完了したので追記しています。

次に、経験(Experience)と学歴(Education)に関する部分をコーディングして追加しました。

<div className='.profile-exp.bg-white.p-2'>
              <h2 className='text-primary'>Experience</h2>
              {profile.experience.length > 0 ? (
                <Fragment>
                  {profile.experience.map(experience => (
                    <ProfileExperience
                      key={experience._id}
                      experience={experience}
                    />
                  ))}
                </Fragment>
              ) : (
                <h4>No experience credentials</h4>
              )}
            </div>
            <div className='.profile-edu.bg-white.p-2'>
              <h2 className='text-primary'>Education</h2>
              {profile.education.length > 0 ? (
                <Fragment>
                  {profile.education.map(education => (
                    <ProfileEducation
                      key={education._id}
                      education={education}
                    />
                  ))}
                </Fragment>
              ) : (
                <h4>No education credentials</h4>
              )}
            </div>

            {profile.githubusername && (
              <ProfileGithub username={profile.githubusername} />
            )}

Experienceの値が0以上(何らかが記入されている)なら経験を表示、そうでなければ、No experience credentials(何も経験なし)と表示されるようにしています。

また、Educationについても同様で、ほぼExperienceをEducationに置き換えた仕様になっています。

GitHubのレポジトリー取得&表示は次のレッスンで行うのですが、本日次のレッスンまで学習したので、ユーザーネームを入力するとレポジトリが表示されるようになっています。

②client/src/components/profile/ProfileExperience.js 新しいファイル作成

同じフォルダ内に新しいファイルProfileExperience.jsを作成しました。

import React from "react";
import PropTypes from "prop-types";
import Moment from "react-moment";

const ProfileExperience = ({
  experience: { company, title, location, current, to, from, description }
}) => (
  <div>
    <h3 className='text-dark'>{company}</h3>
    <p>
      <Moment format='YYYY/MM/DD'>{from}</Moment> -{" "}
      {!to ? (
        " Now"
      ) : (
        <Moment
          format='YYYY/
        MM/DD'
        >
          {to}
        </Moment>
      )}
    </p>
    <p>
      <strong>Position: </strong> {title}
    </p>
    <p>
      <strong>Description: </strong> {description}
    </p>
  </div>
);

ProfileExperience.propTypes = {
  experience: PropTypes.array.isRequired
};

export default ProfileExperience;

react-momentのMomentを使用して、経験や職歴がいつからいつまでなのか日時表示できるようにしました。また、to(いつまで)のところに日時を入力していない場合はNowと表示されるようになっています。あとは、役職と説明も表示するようになっています。

③client/src/components/profile/ProfileEducation.js 新しいファイル作成

先程作成したProfileExperience.jsをコピペして持ってきて、少々内容を変えたのみのファイルです。Momentを使用したところは同じで、後は学校や学位、説明などが表示されるようになっています。

import React from "react";
import PropTypes from "prop-types";
import Moment from "react-moment";

const ProfileEducation = ({
  education: { school, degree, fieldofstudy, current, to, from, description }
}) => (
  <div>
    <h3 className='text-dark'>{school}</h3>
    <p>
      <Moment format='YYYY/MM/DD'>{from}</Moment> -{" "}
      {!to ? (
        " Now"
      ) : (
        <Moment
          format='YYYY/
        MM/DD'
        >
          {to}
        </Moment>
      )}
    </p>
    <p>
      <strong>Degree: </strong> {degree}
    </p>
    <p>
      <strong>Field Of Study: </strong> {fieldofstudy}
    </p>
    <p>
      <strong>Description: </strong> {description}
    </p>
  </div>
);

ProfileEducation.propTypes = {
  education: PropTypes.array.isRequired
};

export default ProfileEducation;

 

④前回困っていた「EditProfile」ボタンが表示されないエラー解消。いつの間にか表示されるようになっていた(エラーが勝手に解消されていた)

前回のレッスンで「EditProfile」というプロフィール編集ボタンを作成したものが表示されないというエラーに困っていたのですが、今日localhostで画面を見てみたら表示されていました。

エラーが解消された理由は不明なのですが、npmを再起動するとエラーが直ることもあるようなので、その可能性もありそうです。本日はこのエラー解消からやろうと思っていたのですが、何もする必要なしでした。

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

★Section10:Profile Display

-Lec58. Profile Experience & Education Display(このブログ記事に書いた内容)

-Lec59. Displaying Github Repos(本日はここまで完了。次のブログ記事の内容)

進捗状況:82%

学習時間4.0時間

★参考にした本★

「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コマンドではまったところと解決方法
おすすめの記事
97日目:Redux概要を復習&Redux devtools extension動く& Auth ReducerとRegister Action作成
プログラミング100日チャレンジ記録 #100daysofcode
昨日色々と上手くいかなかったので、本日は復習のみで終わるかと思ったのですが、ユーザーauthenticationのセクションを進めることがで...
【Javascript ES7 & React】constructorやsuper(); this.を使わないClassの新しい書き方: Classes&Properties & Methods【ES6との違い】
Javascript/React/Redux
ES7でのclassの書き方、 さらにmethods、 propertiesのコーディングについてまとめました。ES7では(ES6と違って)...
102日目①:Create Profile Action:React routerでwithRouterを使ってリダイレクトを可能にする
プログラミング100日チャレンジ記録 #100daysofcode
今回は、ダッシュボードのプロフィール部分のactionを作成しました。新しく学んだことは、import { withRouter} from...