🛠️ 7-3. パフォーマンスと保守性を意識した設計ポイント

✅ 要点まとめ


🟢 ① refcomputed の使い分けを意識する

状態 使うもの 説明
値を直接変更する必要あり ref 基本的に count.value++
別の変数から計算される computed 自動で再計算される
const count = ref(0);
const doubleCount = computed(() => count.value * 2); // ✅ 無駄な watch 不要


🟡 ② ロジックを Composable に分ける(再利用しやすい関数)

【コンポーネントに書きすぎるパターン】 ❌

const loading = ref(false);
const error = ref<string | null>(null);

const fetchData = async () => {
  loading.value = true;
  try {
    const response = await fetch('https://...');
    // 処理
  } catch (e) {
    error.value = '失敗';
  } finally {
    loading.value = false;
  }
};

【Composable に分離したパターン】 ✅

// ファイル名: useFetch.ts
import { ref } from 'vue';

export function useFetch(url: string) {
  const data = ref<any>(null);
  const loading = ref(false);
  const error = ref<string | null>(null);

  const fetchData = async () => {
    loading.value = true;
    error.value = null;
    try {
      const response = await fetch(url);
      data.value = await response.json();
    } catch (e) {
      error.value = '取得失敗';
    } finally {
      loading.value = false;
    }
  };

  return { data, loading, error, fetchData };
}

// コンポーネント側
const { data, loading, error, fetchData } = useFetch('<https://api.example.com>');


🟣 ③ 過剰な watch を避ける → computed で代用できないか考える