Vue で、配列が初期化されて出力が表示されると、「未定義のプロパティを読み取れません」というエラーが発生するのはなぜですか?
P粉642919823
P粉642919823 2023-08-28 23:38:03
0
1
577
<p>App.vue と 1 つのコンポーネントUsersPage.vue という 2 つの vue ファイルがあります。</p> <p>UsersPage.vue:</p> <pre class="brush:php;toolbar:false;"><script> デフォルトのエクスポート { データ:() =>({ ユーザーリスト: [] })、 メソッド:{ async createUsersList(){ this.usersList = await fetch("https://jsonplaceholder.typicode.com/users").then((response)=> response.json()); } }、 作成した(){ this.createUsersList(); } } </スクリプト> <テンプレート>
    <li v-for=「usersList 内のユーザー」 :key="user.id"><b>姓:</b>{{user.name}}、<b>使用户名:</b> {{user.username}}、<b>邮编:</b> {{user.address.street}} </li> </ul> </template></pre> <p>和App.vue:</p> <pre class="brush:php;toolbar:false;"><script> UsersPage を「./components/UsersPage.vue」からインポートします。 デフォルトのエクスポート { コンポーネント: { ユーザーページ、 }、 データ: () => ({ 現在のページ: "首页", })、 メソッド: { showHomePage() { this.currentPage = "首页"; }、 showLoginPage() { this.currentPage = "登录"; }、 }、 }; </スクリプト> <テンプレート> <ヘッダークラ​​ス=「ヘッダー」> <スパンクラス="ロゴ"> <img src="@/assets/vue-heart.png"幅= "30" />セ ラ ビュー </span> <ナビクラス="ナビ"> <a href="#" @click.prevent="showHomePage">首页</a> <a href="#" @click.prevent="showLoginPage">登录</a> </ナビ> </ヘッダー> <ユーザーページ/> </template></pre> <p>このプログラムを実行すると、問題はなく、表示されます。ただし、usersList を任意の数の要素を持つ配列 (例: <code>usersList:[1,2]</code>) に変更すると、データは引き続き正しい形式で表示されますが、ブラウザーのコンソールでは次のエラーが発生します: </p> <pre class="brush:php;toolbar:false;">Uncaught TypeError: 未定義のプロパティを読み取れません ('street' を読み取ります) UsersPage.vue:19:149 renderList で (runtime-core.esm-bundler.js:2894:22) Proxy._sfc_render で (UsersPage.vue:19:163) renderComponentRoot で (runtime-core.esm-bundler.js:902:44) ReactiveEffect.componentUpdateFn [as fn] (runtime-core.esm-bundler.js:5615:57) ReactiveEffect.run で (reactivity.esm-bundler.js:187:25) instance.update (runtime-core.esm-bundler.js:5729:56) setupRenderEffect で (runtime-core.esm-bundler.js:5743:9) mountComponent で (runtime-core.esm-bundler.js:5525:9) processComponent (runtime-core.esm-bundler.js:5483:17)</pre> で <p>データは正しくレンダリングされ、アドレスが https://jsonplaceholder.typicode.com/users に存在するにもかかわらず、このエラーが発生するのはなぜですか? </p>
P粉642919823
P粉642919823

全員に返信(1)
P粉087074897

v-for では、users.address.street を使用しました。

[1, 2]usersList に渡し、Vue が v-for 経由で項目を解析すると、## の各番号を読み取ろうとします。 #アドレスストリート###。 これらは数値であるため、その

アドレス

未定義です。 unknown のプロパティにアクセスしようとすると、発生したエラーが発生します。

NOTE

: v-for がエラーをスローせずに address のない項目を解析できるようにしたい場合は、 users を使用できます。 address.streetusers.address?.street に置き換えられます。 ドキュメント: null 合体演算子

また、イテレータに
users

という名前を付けると、このコードを変更する必要がある自分や他の開発者が users とは何かについて混乱する可能性があるため、名前を付けないでください。 user という名前を付ける必要があります (例: v-for="usersList のユーザー" :key="user.id")。 ただし、数値の場合は address.street
プロパティにアクセスできないという事実は変わりません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート