🛡️ 8-2. undefined 参照問題の回避

✅ 要点まとめ


🟥 よくある undefined エラー例

const props = defineProps<{ userId?: number }>();

// ❌ userId が undefined の場合、API の URL が変になる
const url = `https://api.example.com/users/${props.userId}`;


🟢 回避パターン①: デフォルト値を入れる

const userId = props.userId ?? 1; // もし undefined なら 1 を使う
const url = `https://api.example.com/users/${userId}`;


🟡 回避パターン②: オプショナルチェーン (?.) の活用

const myInput = ref<HTMLInputElement | null>(null);

// ❌ myInput.value が null の可能性 → エラー
// myInput.value.focus(); // ❌

myInput.value?.focus(); // ✅ null なら何もしない


🟣 回避パターン③: v-if で DOM に存在しているか確認してから操作

<template>
  <!-- myInput がセットされてからボタンが表示される -->
  <input ref="myInput" />
  <button v-if="myInput" @click="focusInput">フォーカスする</button>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const myInput = ref<HTMLInputElement | null>(null);

const focusInput = () => {
  myInput.value?.focus();
};
</script>


🟤 回避パターン④: 型アサーション (!) を慎重に使う