Laravel×ReactでつくるSPAスケジュールアプリ【⑤新規登録】

LaravelとReactで作るSPAアプリ第5段です。
次はReactでスケジュールを新規に登録していきましょう。

Laravel×ReactでつくるSPAスケジュールアプリ【⑤新規登録】

登録の仕組みについておさらい

今回作成する登録画面の完成形は以下の通りです。

カレンダーをクリックするとポップアップで登録画面が出てくる感じです。
おしゃれで良いですね。さて、これを作る前に、アプリケーションの概要について説明しましょう。
前の記事の表示では割愛しましたが、ここで今一度確認です。

このアプリケーションはReactとLaravelで成り立っています。
それらを簡単に図解すると、以下のような形になります。

アプリケーションではブラウザ、コントローラー、データベースの3つに分けられます。
それぞれをReact、Laravelで繋いでいる形です。
そのため、作る場合にはまずはLaravelでコントローラーとデータベースが正しく連携しているか、
そして次にReactでコントローラーとブラウザの連携を確かめます。

まずはバックエンドとして、データベースとコントローラーの連携を行いましょう。

バックエンドを作ろう!

コントローラーを編集します。
以前の記事で「app/Http/Controllers/Api」配下に「ScheduleController.php」を作成しています。
ここに追記します。

ファイル名からも分かるように、これがコントローラーですね。

ScheduleController.php
前の記事でスケジュールの取得は実装済みです。
その下に、登録処理を記載していきましょう。
スケジュールの各要素を指定して、save()で保存する簡単なものです。

登録情報を確認するために最後にJSON形式のReturnをしています。
コントローラーは作成したので、ルート情報を更新して、連携しましょう。
ルートファイルは「routes/api.php」です。

api.php
posts/createを叩くとコントローラーを呼び出すようにしました。
前の記事と同じく、Postmanで登録できるかどうか確認してみましょう。

設定は上の画像を参考にしてください。
「Body」「row」「JSON」を選ぶことを忘れずに。
とくに問題なければ画像の下のように、JSONが返ってきます。

データベースも念のために確認しておきましょう。

しっかりと登録できていますね。OKです。
この段階でSourceTreeでコミットしておいても良いかもしれませんね。

登録用のポップアップを実装する

次はフロントエンドです。コントローラーに接続できればデータは登録できることは確認しました。
連携するために、まずは登録用のポップアップを作成していきましょう。
ポップアップの作成には、Material UIを利用します。

Material UIでポップアップ機能を簡単に実装できるので、そちらを導入していきましょう。
Windows Power Shellに以下を入力して、Material UIを導入しましょう。

これだけでインストールが完了します。
試しにMaterial UI Popoverを用いて、ダイアログを表示してみましょう。
Example.jsファイルを以下のように編集します。す。

Example.js
まずファイル先頭のimport行に追加します。
Material UIのコンポーネントを使用するようにしています。

Example.js
returnの前の関数を記載しているところに追記してください。
Material UIのPopoverに必要なopen、onClick、onCloseを定義しています。
Popoverに関しては詳細は説明しませんが、気になる方は公式リファレンスを参考にしてください。

https://mui.com/components/dialogs/

最後にreturnの中身にダイアログの表示情報を記載すればOKです。

Example.js
これでカレンダーの欄をクリックするとダイアログが表示されるようになります。
ビルドして確認をしてみてください。

スケジュールをクリックすると、ダイアログが表示されましたね!

登録用のポップアップを作成しよう!

ダイアログの表示は出来たので、次に登録用のフォームを作成しましょう。
Example.jsのダイアログの部分を追記していきます。

Example.js
さまざまなMaterial UIを導入しているので、ファイル先頭のインポートを増やします。
MenuItemやSelectなどを追加しています。
この状態でビルドを行うと、登録フォームのデザインが出来上がります。

ちなみにプルダウンの中身は簡略化のために「00」と「01」のみにしています。
時刻は23時まで、分数は60まで増やしておいてください。
(登録確認という意味ではこのままでも構いません)

デザインはできましたが、フォームとコントローラーを連動させていないので、データの登録はできません。
次のステップで連携を行っていきましょう。

登録フォームとコントローラーを連携する!

最後に連携作業をしましょう。
連携は事前にフォームのページに登録用配列を作成しておきます。
そしてフォームの値が変更されるたびに、その値を更新します。

フォームの登録ボタンが押されたときに、その配列をコントローラーに丸ごと投げる。
という実装になります。
Example.jsの関数をまとめてある部分に、配列とデータ変更時の関数を追加します。

setFormDataを用いて、フォームの値が変更されるたびに、値をセットするようにします。
フォームの部分も、当然変更します。
Exaple.jsのダイアログの部分を追記していきます。

各種入力インプットに「onChange={inputChange}」を追加しています。
inputChangeは入力値の変更時に配列に値を登録するような関数になっています。
試しにビルドしてフォームにいろいろ入力しながらコンソールを確認してみると、入力値が反映されていることが確認できます。

色々と入力内容を弄ることで、配列にデータが登録されていることが分かります。
今のままではプルダウンは変更しないと影響を与えませんが、これも後程使いやすくしていきましょう。

さて、最後にコントローラーとの連携です。
URLを叩けばデータが登録されることは既に確認済みです。
前の記事でのデータ表示と同じく、anxiosで登録していきましょう。

関数部分に登録処理を追加します。
この関数をクリック時に呼び出すように、return内部のSubscribeボタンにonClickを追加しています。

実際にいろいろ入力してみて、上記の画像のように登録出来ればOKです。
ここまで実装で来たら、SourceTreeでコミットしておきましょう。
細かい部分は後ほど修正するのが良いですね。

さて、今回はここまで。次はスケジュールの更新機能を実装していきましょう。
ここまでのExample.jsのソースを下の折り畳みの中に記載しておきますね。

クリックでExample.jsの全ソース表示
Laravel×Reactでつくるスケジュールアプリ
環境構築 Git、Reactの導入
カレンダー表示 スケジュール表示
スケジュール登録  スケジュール更新
スケジュール削除 関数化Ⅰ
関数化Ⅱ