🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

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

Vuex

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

Q&A

解決済

1回答

1059閲覧

vuexで管理している配列を画面に表示したい

shirout

総合スコア36

Vue.js

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

Vuex

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

0グッド

1クリップ

投稿2021/01/28 03:19

編集2021/02/02 04:43

vuexで配列を保持しているのですが、保持している値を全て画面側に表示する方法が分かりません。
vuex公式を見てみたのですが、配列の取得方法は掲載されていませんでした。
単体で取得表示する方法はわかるのですが教えて頂きたいです。

やりたいことは以下です。
画面Aで値取得
画面B(別画面)で値表示&追加ボタンでB画面に戻り、繰り返すだけここに値が追加されていく

vuex

1 state: { 2 Alist: [{ name: ''}], 3 A: '' 4 } 5 6 mutations: { 7 updateA(state, payload) { 8 state.A = payload 9 }, 10 updateAlist(state, payload) { 11 state.Alist = state.A[payload] 12 },

Avue

1<template> 2 <v-btn @click="pushA(A), pushAlist(A)"></v-btn> 3//実際にはリンゴやバナナのボタンがありますが省略しています 4</template> 5 6<script> 7 methods: { 8 pushA(A) { 9 this.$store.commit('updateA', A) 10 }, 11 pushAlist(A) { 12 this.$store.commit('updateAlist', A) 13 }, 14 },

Bvue

1<template> 2 <v-row v-for="A in Alist" :key="A.id"> 3 <v-card v-for="a in A" :key="A.id" 4 height="30px" width="30px">{{ a }}</v-card> 5 </v-row> 6</template> 7 8<script> 9 computed: { 10 Alist: function() { 11 return this.$store.state.Alist 12 } 13 } 14</script>

エラー内容追記します

//ターミナルのエラーはなくなりました

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

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

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

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

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

plasticgrammer

2021/01/28 05:31

ソースが省略されすぎているので、何が原因で表示されないのかが判断できません。 (inで処理させること自体は間違っていないように思います) 関連ソースおよび発生しているJavascriptエラーなどありましたら、追記をお願いします。
guest

回答1

0

ベストアンサー

一意なキー値を設定する key属性 の指定がないためにエラーとなっているようです。

https://jp.vuejs.org/v2/api/#key

投稿2021/01/28 08:03

plasticgrammer

総合スコア629

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

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

shirout

2021/01/28 08:12

お返事ありがとうございます。 keyを指定することでエラーはなくなりましたがv-cardそのものがまだ表示されない状態です。
shirout

2021/01/28 08:16

(Emitted value instead of an instance of Error) <v-card v-for="a in Alist">: component lists rendered with v-for should have explicit keys. See https://vuejs.org/guide/list.html#key for more info. 警告としてまだ出ていました
plasticgrammer

2021/01/28 08:57

参考サイトのURLを載せたのですが確認しましたか? v-forを指定した要素と同じ要素で、一意となる値をkey属性へバインドしてみてください。
shirout

2021/01/28 09:03

お返事に不備がありました。 警告、エラーともに解消したのですが、配列の値は表示されないままです。 参考サイトありがとうございます。
plasticgrammer

2021/01/28 13:46

:key="A.id" としていますが、Aは文字列ですよね? id属性はないと思いますが。
shirout

2021/01/29 02:36

お返事ありがとうございます。 vuexと画面のコードを修正して現在は値を1つ画面に表示することができました。 しかし画面Aに戻って再度値を取得してB画面に行くと配列の中身が上書きされて1つしか表示されません。 エラーも出ておらず原因はvuexなのかなと考えています。
plasticgrammer

2021/01/29 03:01

:key="key.id" としていますが、これは何の値を参照しているのでしょうか。 keyの実体がソースは存在していないようです。 参考サイトを再度参照してみてください。
shirout

2021/01/29 05:28

丁寧にありがとうございます。 key部分をもう一度サイトを参照して修正しました。 まだ上書きされる状態ではあります。
plasticgrammer

2021/01/29 06:48

以前、指摘した状態に戻ってしまいましたね。 (2つ前のコメントを参照してください) 参考サイトと同じ記述をするのではなく、内容を理解して対応をお願いします。 参考サイトを例にすると item は文字列ではなく、連想配列({id:1, name:'abc'}のようなもの)となっており、item.idにより値が取得できる状態となっています。 また、このitem.idが複数のitemを識別できる一意な値であるため、key属性として使用しています。
shirout

2021/02/02 02:26

物分かり悪くてすみません。 itemは配列であり、その中にはidやnameがある。 そして、item.idとすることで配列内のものを識別できるということですか? 今回の私の場合は:key="AList"が正解ということになるのでしょうか?
plasticgrammer

2021/02/02 04:28 編集

> itemは配列であり、その中にはidやnameがある。 > そして、item.idとすることで配列内のものを識別できるということですか? 参考サイトの例では、itemsが連想配列の配列で、itemが連想配列です。 itemには前述の例のようにidや他の値も保持しています。 > 今回の私の場合は:key="AList"が正解ということになるのでしょうか? keyには繰り返し毎に一意となる値を設定しなければなりません。 何が一意となるかはこちらでは判断できないのでなんとも言えません。値(A)が一意になるなら、それでもよいのかもしれません。(AListはダメです) 繰り返しのindexをkeyに設定するような例もありますが、それで問題となるようなケースもあるようです。 https://qiita.com/FumioNonaka/items/d1d9c9335116426a8316
shirout

2021/02/02 04:48

>keyには繰り返し毎に一意となる値を設定しなければなりません。 今回はAListにリンゴやバナナという値を入れてそれを表示しようとしています。 vuexのstateで配列を作っていますが、このつくり自体が間違っているのでしょうか? Aという値が一意にになると判断したのですが変わらずでした。
plasticgrammer

2021/02/02 05:23

> このつくり自体が間違っているのでしょうか? 間違っていないと思います。 ですが、掲載頂いているものが最新のソースではない気がするので何が問題なのかわかりません。 > Aという値が一意にになると判断したのですが変わらずでした。 v-forによるループが2つありますが、いずれも :key="A" ということですか? だとしたら、key属性の役割や意味をまだ正確に理解できていないものと思います。 提示した公式サイト以外の資料を幾つかみて、理解を深めてみてください。
shirout

2021/02/09 08:06

vuexの更新処理で、 state.ALIST.push(payload)と書くことで追加できました。 ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問