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

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

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

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

Q&A

解決済

1回答

2024閲覧

vue.js dataにデータが入っているのに、マスタッシュで表示ができない

popc

総合スコア32

Vue.js

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

0グッド

0クリップ

投稿2019/11/11 07:26

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

dataにデータが入っているのに、
[Vue warn]: Error in render: "TypeError: Cannot read property '○○' of undefined"
というエラーが出ます。

###該当のソースコード

lang

1 new Vue ({ 2 el:'#app', 3 data: { 4 termAllCount : 3, 5 shohinsArray: null, 6 dataGetEnd:false 7 }, 8 async created(){ 9 this.shohinsArray = await this.query(); 10 this.dataGetEnd = true 11 }, 12 methods: { 13 async query(){ 14 this.dataGetEnd = false 15 let shohinsArr = [] 16 const termArr = [8,9,10] 17 const createdata = () => { 18 for(let i = 0; i<this.termAllCount; i++){ 19 const thisterm = termArr[i] 20 const resturlBase = inputResturl.value; 21 const resturl = resturlBase + '/○○/' + '?term=' + thisterm 22 axios.get(resturl) 23 .then((response) => { 24 let a = { 25 item:response.data.item 26 } 27 shohinsArr[i] = a 28 }) 29 } 30 return shohinsArr 31 } 32 shohinsArr = await createdata() 33 return shohinsArr 34 }, 35 }, 36 }) 37

lang

1 <div v-if="dataGetEnd"> 2 <div>{{shohinsArray[0].item.○○}}</div> 3 </div>

###試したこと

Vue.js devtoolsで確認すると、リロードしたときにdataが入ったり入っていなかったりします。
async,awaitでshohinsArrayが入ってからdataGetEndをtrueにし、v-ifで表示させているはずなのですが、取得できていません。

getはうまくいっていることが確認できています。
asyncの書き方がよくないのかもしれませんが、どこが悪いのかわからず、教えていただきたいです。
何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

async内では非同期処理をしたいときにawaitを使ってそれを行います

new Vue({ data: { shohinsArray: [], termArr: [8, 9, 10], }, methods: { async query() { for await (const thisterm of this.termArr) { const resturl = `${inputResturl.value}/○○/?term=${thisterm}`; axios.get(resturl).then((response) => { this.shohinsArr.push({ item: response.data.item }); }); } return this.shohinsArr; } } })

推奨されませんが簡単にするために await for-ofを使いました

Nuxtと勘違いして回答したので編集しました

投稿2019/11/11 12:31

編集2019/11/12 01:23
mouse_484

総合スコア759

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

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

popc

2019/11/11 23:43

ご回答いただきありがとうございます。 おっしゃる通りasync-dataを使えば解決しそうですね。 …ただ、今回、WordPressを基本にして一部Rest APIでデータを取得するプロジェクトで進んでいること、また私自身がNuxt.jsに詳しくなく、組み合わせて使えるレベルにないことから、Nuxt.jsを使わない方向で実装できればと考えております。(もし方法がなければ、無いという方向でまた実装方法を考える所存です。)
mouse_484

2019/11/12 00:55

あ、申し訳ありません VueをNuxtと勘違いしていました
popc

2019/11/12 01:27

将来的にNuxt.jsも勉強していきたいと思っていますので、参考にさせていただきます。ありがとうございました。
mouse_484

2019/11/12 01:29

Vueで実行できるだろうコードに編集させてもらいました できなかったらすいません
popc

2019/11/12 08:02

ありがとうございます。 いただいたコードを確認しまして、return前にawaitしないといけないということがわかりましたので、それを踏まえて書き直したところ、うまくいきました! 非同期処理の理解が足りていなかったようです。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問