kotarou1192

人間に擬態中

観賞魚のWikiを自作する日記シリーズ 〜Reactの準備とメニューバーの作成〜

はじめに

今日はReact+TypeScriptの環境構築とメニューバーの作成まで行こうと思う。

今後使うRailsのWebAPI(アカウント作成)

既に適当に作っているのでRailsでのWebAPI作成の記録は割愛。
現在以下のような仕様のAPIがある。

POST http://localhost:3000/api/v1/users

リクエストに必要なパラメーター

  • name
    • 30文字まで
    • 英数字とハイフンのみ使える。
  • email
    • 255文字まで
  • password
    • 6-50文字

example

{
  "name": "takashi",
  "email": "takashi@example.com",
  "password": "hogefugapiyo"
}

レスポンス

SUCCESS http response 200 ok

メールがメアドに送られる。

{
    "message": "activation mail has been sent"
}

FAILED http response 400 bad request

エラーの配列が返ってくる

[
    {
        "messages": [
            "has already been taken"
        ],
        "key": "name"
    },
    {
        "messages": [
            "has already been taken"
        ],
        "key": "email"
    }
]

まずは後数回の記事でこのAPIを使うフロントを作ろうと思う。

Reactの準備

> create-react-app aquariumpedia-front --template typescript

以上のコマンドでtypescript+Reactなプロジェクトを作成した。

とりあえず動かしてみる

> yarn start

f:id:takashiii1192:20201127161515p:plain

動いた。

生成されたファイルを確認してみる。

f:id:takashiii1192:20201127161644p:plain

Reactはそこまで詳しくないのでわからないのだが、とりあえずはこれで良さそうである。動いているからヨシ!Webpackとか何も入ってないけどいまのところはヨシ!

src配下を全部消して、とりあえず動くものを作っていこうと思う。

今回はなうでヤングなアローファンクションとHOOKSを使ってコンポーネントを作っていく。

最初の一歩

とりあえずいつもの通りにエントリーポイントを作っていく。

index.tsx

import React from 'react';
import ReactDOM from 'react-dom';
import { App } from './App';

ReactDOM.render(<App></App>, document.getElementById("root"));

index.htmlにはrootというIDのついたDOMがあるので、そこにAppというコンポーネントを表示する。

つぎにApp.tsxと言うファイルを作り、そこに最初の単純なコンポーネントを作っていく。

App.tsx

import React from "react";


export const App: React.FC<{}> = () => {
  return <div>hello, world</div>;
}

表示できたかな・・・?

f:id:takashiii1192:20201127164602p:plain

無事にハローワールドしている。

f:id:takashiii1192:20201127164727p:plain

DOMの中身もOK。

拡張していこう。

メニューバーのコンポーネント

かっこいいメニューバーを作っていこうと思う。

イメージとしてはこうだ

f:id:takashiii1192:20201127165407p:plain

雑さには目を瞑って欲しい。伝わればいいのだ。

真ん中に検索、右側に鉛筆マークとアカウントマーク、左にロゴ。

アカウントマークにマウスオーバーするとウィンドウが出てきてログインか新規登録を選ばせるようにしたい。
ログイン後はマイページを司る。

鉛筆マークは投稿ボタンだ。

とりあえずcomponentsと言うフォルダを作り、その中にMenuBar.tsxと言うファイルを作る。

その中身を編集し、とりあえず表示したいものを並べてみる。

MenuBar.tsx

import React from "react";

export const MenuBar: React.FC = () => {
  return (
  <div>
    <div>logo</div>
    <div>search</div>
    <div>account</div>
    <div>write</div>
  </div>
  );
}

f:id:takashiii1192:20201127170855p:plain

とりあえず縦に並んだ。横にして色をつけてあげよう。

f:id:takashiii1192:20201127181326p:plain

色々と変なところはあるが、とりあえずはモックとしてはこれでいいだろう。
ボタンを画像などに差し替えてあげればそれらしくなりそうだ。

今日の作業をGitに保存しておく。

> git add -A
> git commit -m"add: menu bar mock"

我ながら雑なコミットだが許して欲しい。
masterブランチに直接コミットしている時点で神の怒りを買う恐れがあるので、次からはトピックブランチを切っていく。
また、ESLintやPrittierなどの設定もどうなっているかわからないので、次回で設定してしまいたい。

いちおうGitHubへプッシュしておいた。

GitHub - kotarou1192/aquariumpedia-front

今日はここまで。続く。