実現したいこと
配列を返すcomputedを配列にしたいです。
発生している問題・分からないこと
ソースコードのvalue2のように値を返すcomputedの配列は問題ありません。
list1のように配列を返すcomputedも問題ありません。
しかしlist2のように配列を返すcomputedを配列にすると期待通りに動作しません。
エラーメッセージ
error
1main.js:12 [Vue warn]: Unhandled error during execution of render function 2 at <Test onVnodeUnmounted=fn<onVnodeUnmounted> ref=Ref< undefined > > 3 at <RouterView> 4 at <App> 5 6[Vue warn]: Unhandled error during execution of component update 7 at <RouterView> 8 at <App> 9 10chunk-U3LI7FBV.js?v=d72bdfcc:270 Uncaught (in promise) TypeError: Converting circular structure to JSON 11 --> starting at object with constructor 'ReactiveEffect' 12 | property 'deps' -> object with constructor 'Link' 13 --- property 'sub' closes the circle 14 at JSON.stringify (<anonymous>) 15 at toDisplayString (chunk-U3LI7FBV.js?v=d72bdfcc:270:196) 16 at Test.vue:24:47 17 at renderList (chunk-U3LI7FBV.js?v=d72bdfcc:5014:18) 18 at Proxy._sfc_render (Test.vue:1:1)
該当のソースコード
Vue.js
1<script setup> 2import { reactive, computed } from 'vue' 3 4const data = reactive({ 5 value: 0, 6 list: [0], 7}) 8const value1 = computed(() => data.value) 9const value2 = [computed(() => data.value)] 10const list1 = computed(() => data.list) 11const list2 = [computed(() => data.list)] 12</script> 13 14<template> 15 <button @click="data.value++; data.list[0]++">Click</button><br /> 16 {{ value1 }}<br /> 17 {{ value2[0] }}<br /> 18 {{ list1[0] }}<br /> 19 {{ list2[0][0] }}<br /><!-- エラーにはならないが表示されない --> 20 <ul> 21 <li v-for="v in list1">{{ v }}</li> 22 </ul> 23 <ul> 24 <li v-for="v in list2[0]">{{ v }}</li><!-- エラーになる --> 25 </ul> 26</template>
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
teratailで「Vue.js computed 配列」で検索しましたが同様の問題が見つかりませんでした。
補足
windows 11 pro 23H2
docker 27.3.1
docker desktop 4.36.0
node 23.11
vue 3.5.13
回答1件
あなたの回答
tips
プレビュー