【学習記録】個人開発アプリに画面を追加したメモ

個人開発してるアプリに画面を追加しました。
去年はフロントエンドのコーディング全然できなかったのですが、だんだんVueで思ったようにコード書けるようになってきて自分の成長が実感できて嬉しいのでメモします。
コミットは以下になります。

github.com

アプリの概要はよくある写真投稿系のSNSをイメージしていて、トップページが投稿順に写真一覧を表示し、各画像をクリックするとその写真の詳細ページに移動する、という流れです。

こちらがアプリのトップ画面です。 f:id:JunpeiNakasone:20210223144244p:plain

こちらが各画像をクリックして遷移する写真の詳細画面です。
f:id:JunpeiNakasone:20210223144346p:plain

ここからユーザーの画像をクリックするとユーザーの詳細ページに飛ぶように実装する予定です。
そこまで実装できたらフォロー機能かコメント機能を追加していきたいと考えてます。

トップ画面のコードは以下のように書いています。

<template>
  <div>
    <div class="columns is-gapless is-multiline">
      <div class="column is-4" v-for="post in postType" 
             :key="post.picture_id">
            <router-link :to="{name: 'detail', params: {id: 
                 post.picture_id}}">
                   <img :src="post.image_url">
            </router-link>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  props: [
    "postType"
  ],

}
</script>

親からpostTypeというデータを受け取る子コンポーネントとしてPostList.vueを用意しています。

写真詳細画面は以下のようにコードを書いています。

<template>
  <section>
    <div class="columns is-mobile">
      <div class="column">
        <figure class="image is-48x48">
          <router-link :to="{name: 'userpage', params: {user_id: 
                pictureData.user_id}}">
              <b-tooltip :label="pictureData.user_name">
                <img class="is-rounded" 
                   :src="pictureData.icon_image">
               </b-tooltip>
          </router-link>
        </figure>
        <p>{{ pictureData.image_note }}</p>
      </div>
    </div>
    <b-image :src="pictureData.image_url" ratio="16by9" />
    <div class="columns box">
      <div class="column">
        <b-button
          tag="router-link"
          to="/"
          type="is-info"
        >戻る</b-button>
      </div>
    </div>
  </section>
</template>

<script>
import api from '@/services/api'

export default {
  data() {
        return {
          pictureData: {}
        }
    },
    async mounted() {
      api.post('/fetchImageByPictureID', {
        picture_id: this.$route.params.id
      })
      .then((res) => {
        this.pictureData = res.data
      })
      .catch((err) => {
        console.log(err)
      })
    }
}
</script>

APIから写真のデータと写真を投稿したユーザーのデータを取得し変数pictureDataに代入してテンプレートで表示しています。

Buefyのtooltipが使いやすくて良かったです。

引き続きコード書いてアプリを形にしていきたいと思います。