Vue.js: Cannot read properties of undefined
Vue.jsでdata/computedの初期値がnullの状態でプロパティアクセスした際に発生するTypeError
概要
Vue.jsでTypeError: Cannot read properties of undefinedが発生する主な原因は、dataやrefの初期値がnullの状態でテンプレート内でプロパティにアクセスすることです。非同期でデータを取得する際に、取得完了前にレンダリングが実行されてエラーになります。
エラーメッセージ
TypeError: Cannot read properties of undefined (reading 'name')
TypeError: Cannot read properties of null (reading 'map')
発生パターン
Options API
| |
Composition API
| |
解決策
1. v-ifでガード
最も確実な方法。データがある場合のみ描画します。
| |
2. オプショナルチェイニング
テンプレート内でも使用可能です。
| |
3. 配列は空配列で初期化
v-forを使う場合は初期値を[]にします。
| |
4. computedでデフォルト値を返す
| |
5. propsにdefault値を設定
| |
6. TypeScriptで型安全にする
| |
Composableで再利用
データ取得パターンを共通化します。
| |
| |
よくある間違い
- v-ifとv-forの同時使用: 同じ要素に
v-ifとv-forを使うと予期しない動作になる。<template>でラップする - refの.valueを忘れる:
<script>内ではuser.value、テンプレート内ではuserでアクセス - リアクティブでないオブジェクトのプロパティ追加: Vue 3では
reactiveオブジェクトに新しいプロパティを追加しても自動追跡される
関連エラー
- TypeError: Cannot read properties of undefined - 基本的な原因と解決策
- Property or method is not defined - 未定義のプロパティ参照
- Avoid mutating a prop directly - propsの直接変更
関連エラー
JavaScript の他のエラー
この記事は役に立ちましたか?