質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

706閲覧

Vuexの値をtemplate内で使用するとエラー

kaji120

総合スコア39

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/06/15 22:20

編集2021/06/20 12:32

前提・実現したいこと

GoogleBooksAPIから書籍情報を取得してpage内で表示させていましたが、書籍情報を使い回したいと考えVuexを使用することにしました。
私のイメージでは

① クリック(getBook)されるとtemplate内のkeywordがVuexのkeywordに格納されて書籍情報を取得する
② axiosで取得した書籍情報がstoreの配列(books)に格納される
③ store内の書籍情報ををtemplate内のbooks配列に格納する
③ template内のbooks配列をv-forで取り出して表示する

なのですが、エラーがでてうまくいきません。

発生している問題・エラーメッセージ

イメージ説明

該当のソースコード

~/store/index.js

Vuex

1const BASE_URL = 'https://www.googleapis.com/books/v1/volumes?q=' 2 3export const state = () => ({ 4 books: [], 5 keyword: '' 6}) 7 8export const mutations = { 9 getBooks (state, res) { 10 state.books = res.data.items 11 }, 12 getKwyword (state, keyword) { 13 state.keyword = keyword 14 } 15 16} 17 18export const actinons = { 19 async getBookAction ({ commit }) { 20 await this.$axios.$get(BASE_URL + state.keyword + '&maxResults=15') 21 .then((res) => { 22 commit('getBooks', res) 23 }) 24 } 25} 26

~/page/search.vue

Vue

1<template> 2 <div class="teal lighten-1 background pa-10"> 3 <v-container> 4 <v-card> 5 <v-card 6 v-for="book in books" 7 :key="book.id" 8 > 9 <div class="d-flex flex-row mb-3 pa-5"> 10 <img :src="image(book)"> 11 <div> 12 <v-card-title>{{ title(book) }}</v-card-title> 13 <v-card-subtitle>{{ authors(book) }}</v-card-subtitle> 14 </div> 15 </div> 16 </v-card> 17 </v-container> 18 </v-row> 19 </v-sheet> 20 </div> 21</template> 22<script> 23import noImage from '~/assets/images/noImage.png' 24 25export default { 26 data () { 27 return { 28 keyword: '', 29 books: [], 30 } 31 }, 32 33 computed: { 34 getBooks () { 35 return this.$store.state.books 36 } 37 }, 38 39 methods: { 40 41 get () { 42 this.$store.commit('getKeyword', this.keyword) 43 this.$store.dispatch('getBookAction') 44 }, 45 46 // APIリクエスト後の処理 47 setBooks (res) { 48 this.books = this.$state.books 49 }, 50 51 // 取得した書籍データの設定 52 title: valu => valu.volumeInfo.title ? valu.volumeInfo.title : 'No title', 53 authors: valu => valu.volumeInfo.authors ? valu.volumeInfo.authors[0] : 'No authors', 54 image: valu => valu.volumeInfo.imageLinks ? valu.volumeInfo.imageLinks.thumbnail : noImage 55 } 56} 57</script> 58

補足情報(FW/ツールのバージョンなど)

Nuxt.js 2.15
Ruby 6.01

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問