概要
Vueにおいてchartjsを利用して各ユーザーごとのグラフをループで表示しています。
ユーザーごとのデータを判別するために、連想配列を用いています。
困っている事
グラフは正しく表示されるのですが、コンソールに表示される下記warningが消せません。
[Vue warn]: Invalid prop: type check failed for prop "chartData". Expected Object, got Undefined
想定している流れ
- 画面起動時にDBからユーザーのリストを取得する
- 各ユーザーの情報をDBから取得する
- 取得したユーザーの情報をchartItems[ユーザー名]のオブジェクトに入れる
- chartjsでグラフが反映される
試した解決方法
こちらにほぼ回答に近い記事があります。
https://nplll.com/2019/05/vue-chartjs_error/
https://www.ultra-noob.com/blog/2020/50/
しかし解決されませんでした。
chartItems[ユーザー名] = {オブジェクト} という構造の違いが問題でしょうか。。
コード
実際のコードとは異なりますが、簡潔に要所のみを抜き出しています。
js
1<template> 2 <div v-for="User in Users" :key="User.name"> 3 4 <BarChart v-bind:chartData="chartItems[User.name]" :options="Options" :styles="chartSize"/> 5 6 </div> 7</template> 8 9<script> 10 11 data () { 12 return { 13 Users:[] 14 chartItems: { labels:[], datasets: [] }, 15 } 16 }, 17 18 19 created () { 20 this.setChart() 21 }, 22 23 methods:{ 24 setChart(){ 25 this.$axios.$post(/getUsers) 26 .then(res=> { 27 // APIを実行してユーザー情報を取得します。仮に下記のようなデータが取得されると仮定します。 28 this.Users = [{name:"Arisa", id:1111}, {name:"Bob", id:2222}, {name:Charley, id:3333}] 29 }) 30 31 this.Users.foreach(user=>{ 32 var obj = { 33 labels: [1,2,3,4,5], 34 datasets: [{ 35 label: "フォロワー数", 36 data: this.Data[user.name], // 別途APIから取得したData[ユーザー名]の連想配列があります。 37 }] 38 } 39 40 // ここでchartDataにバインドするchartItems[ユーザー名]をセットします。 41 this.$set(this.chartItems, user.name, obj) 42 43 }) 44 } 45 } 46 47</script> 48 49
知りたい事
「レイアウトが作成される段階ではchartItems["Arisa"]やchartItems["Bob"]は存在しないのでwarningが表示されるが、this.$setでchartItems["Arisa"]などが検知されて結果として表示は問題ない」という解釈で相違ないでしょうか。
また、エラーを表示させない方法も知りたいですが、そもそもの画面表示が問題なくできてしまっている以上、このwarningは無視するというのもひとつの解決でしょうか。
素人質問で大変恐縮でございますが、何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー