小村のポートフォリオサイト開発(17) API呼び出しをstoreに記述する

f:id:kom314_prog:20210904152907p:plain
  • サクサクっとサムネイル画像を表示できるようにUIを修正しました。

    • 修正箇所は割愛。
  • 画像入るとだいぶそれっぽく見えますねー

  • 今日は何をしようかなーーー

  • ひとまず今は単純にAPI呼び出ししてますが、今後にそなえてstoreに移動しましょうか。

  • そうしないと他の箇所で使うときに困ることになりますからねー



目次

  1. 現状整理
  2. storeを記述



記録

現状整理

f:id:kom314_prog:20210904154112p:plain



  • この場合、他のコンポーネントではAPIの値を取得できません

  • APIの呼び出しなどを1ヵ所で行い、このBrogCardはそこから値を呼び出すのが好ましいです

  • そこで出てくるのがstoreになります

  • 参考:Nuxt.js store

  • storeはvuexの仕組みを適用したNuxt.jsのフォルダになります

  • API以外にも、他のコンポーネントと値を受け渡したいときはこのstoreを経由します。



storeを記述

export const state = () => ({
  itemsloading: false,
  items: [],
})

export const getters = {
  getEntryItemsLoading(state) {
    return state.itemsloading
  },
  getEntryItems(state) {
    return state.items
  },
}

export const mutations = {
  SET_ITEMS_LOADING(state, bool) {
    state.itemsloading = bool
  },
  SET_ITEMS(state, items) {
    state.items = items
  },
}

export const actions = {
  async fetchEntries({ commit }, params) {
    commit('SET_ITEMS_LOADING', true)
    const response = await this.$axios.get('/api/entries/')
    const items = response.data
    commit('SET_ITEMS', items)
    commit('SET_ITEMS_LOADING', false)
  },
}


  • そしてBlogCard.vueを下記のように修正
f:id:kom314_prog:20210905183552p:plain
f:id:kom314_prog:20210905183617p:plain


  • このようにして、API呼び出し部分をstoreに記述し、それを呼び出すように変更できました

  • 画面表示は変わっておりません

f:id:kom314_prog:20210905183743p:plain
  • 注意点として、async awaitでデータを取得しに行っている間にその格納予定の変数を画面から覗くとエラー吐くので、ロード中はアクセスしないようにしましょう!

  • 上図の<div v-if="!getEntryItemsLoading">がその役割を担ってます



おわりに

  • 基礎と言いながらエラーと戦って数時間かかりました!

  • 業務ではコピペで済ましてた所だったので、改めて自分で調べながら書くと変なところでつまづいたりしますね。

  • 今後は、このstoreを拡張しつつ、ページネーションを作ったりカテゴリをちゃんと表示したりします!

  • ではでは、ちゃお~~~!