[Golang/React]~MovieApp2: 関連データの処理~

こんにちは、KOUKIです。

GolangとReactでMovie Appの開発をしています。

今回は、Movieデータに付随してついてくるGeres(ジャンル)データを処理していきましょう。

尚、Udemyの「Working with React and Go (Golang)」を参考にしているので、よかったら受講してみてください。

前回

GolangとReactのアプリケーション連携方法を紹介しました。

事前準備

フォルダ/ファイル

Genresコンポーネント

以前、「Categories」で作成していたコンポーネントを「Genres」で作り直します。

コンポーネント名の変更

変更の適用

この変更に伴い、App.tsxも修正します。

Genres APIの実装

Genresデータを取得するAPIを実装します。

DB処理

全てのGenresデータを取得するGenresAllメソッドを追加します。

ハンドラーの追加

リクエストを処理するためのハンドラーを実装します。

ルートの追加

Genres APIへアクセスするためのルートを実装します。

検証

「docker-compose up」でコンテナを立ち上げてください。

そして、以下のパラメータで検証をします。

  • URL: http://localhost:4000/v1/genres
  • 形式: GET

idが出力されてませんね。

Genreモデル(golang側)を修正します。

jsonタグを変更したので、これでidが表示されるようになります。

Genresリストの表示

ここからは、Reactの実装になります。

Genresモデル

Genresモデル(React側)を実装します。

リストの表示

Genres APIからデータを取得し、それをリスト化しましょう。

検証

ブラウザから「http://localhost:3000/genres」にアクセスします。

APIの追加

GoのAPIを一つ追加します。

Allメソッドの修正

Genre IDをキーにMovieデータを取得できるようにします。

ハンドラー

ハンドラーを追加します。

ルート

先ほど実装したハンドラーへリクエストを飛ばすために、ルートも追加しましょう。

検証

下記のパラメータで、検証をしましょう。

  • URL: http://localhost:4000/v1/movies/1
  • 形式: GET

OKですね。

Genreに紐づくMovieデータの表示

先ほど取得したMoviesデータをページに表示します。

コンポーネント

コンポーネントを実装しましょう。

ルートの追加

OneGenreコンポーネントへのルートを追加します。

検証

私の環境では、genre_id=1のデータがMovieデータに紐づいています。

ブラウザからデータを取得できるか検証してみましょう。※データが取得できない場合は、何も表示されません。

Genreのタイトル

個別ページのGenreに飛んだ時、ActionやComedyなどのタイトルも表示できるようにしましょう。

Linkパラメータの変更

Documentを読むと、Linkのtoにはオブジェクトを渡すことができるようです。オブジェクトのstateパラメータに、genre_nameを渡してみます。

props

これを遷移先であるOneGenreコンポーネントで受け取ります。

検証

画面を表示してみましょう。

「Genre: Drama」と表示されたので成功です!

スタイリングの変更

長くなりましたが、最後にリファクタリングをしてお終いにしましょう。

Movieリスト

Genresリスト

次回

次回は、ReactのFormを実装します

記事まとめ

参考書籍

ソースコード

routes.go

models.go

movies-db.go

movie-handlers.go

App.tsx

movie.ts

Movies.tsx

Genres.tsx

OneGenre.tsx

コメントを残す