小村のポートフォリオサイト開発(17) API呼び出しをstoreに記述する
こんばんは、小村だよ!
今日も下記のポートフォリオサイトを構築していくよ
- サイト:Little Village
まずはデデン!
サクサクっとサムネイル画像を表示できるようにUIを修正しました。
- 修正箇所は割愛。
画像入るとだいぶそれっぽく見えますねー
今日は何をしようかなーーー
ひとまず今は単純にAPI呼び出ししてますが、今後にそなえてstoreに移動しましょうか。
そうしないと他の箇所で使うときに困ることになりますからねー
目次
- 現状整理
- storeを記述
記録
現状整理
APIの呼び出しなどを1ヵ所で行い、このBrogCardはそこから値を呼び出すのが好ましいです
そこで出てくるのが
store
になりますstoreはvuexの仕組みを適用したNuxt.jsのフォルダになります
storeを記述
では早速書いていきましょうか!
storeでは
state``getter``mutation``action
の4つの要素があります詳しい説明は割愛!基礎なので書籍読もう!
書いた結果がこちら
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を下記のように修正
このようにして、API呼び出し部分をstoreに記述し、それを呼び出すように変更できました
画面表示は変わっておりません
注意点として、async awaitでデータを取得しに行っている間にその格納予定の変数を画面から覗くとエラー吐くので、ロード中はアクセスしないようにしましょう!
上図の
<div v-if="!getEntryItemsLoading">
がその役割を担ってます
おわりに
基礎と言いながらエラーと戦って数時間かかりました!
業務ではコピペで済ましてた所だったので、改めて自分で調べながら書くと変なところでつまづいたりしますね。
今後は、このstoreを拡張しつつ、ページネーションを作ったりカテゴリをちゃんと表示したりします!
ではでは、ちゃお~~~!