0Pricing
Vue Academy · レッスン

ライフサイクルフックとデータ取得

コンポーネントのライフサイクルに適したタイミングでデータを取得します

「ライフサイクルフックとデータ取得」はCoddyKit上の無料Vue Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVue Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vue Academyコースには全3レッスンが含まれています。

データを取得するタイミング

コンポーネントにはライフサイクルがあります。コンポーネントは作成され、DOMにマウントされ、更新され、最終的にアンマウントされます。データ取得にどのライフサイクルフックを使うべきかを知ることで、アプリを適切かつ快適に動作させられます。

createdフック

createdフックは、リアクティブなデータの準備が完了した後、コンポーネントがDOMに挿入される前に実行されます。リアクティビティがすでに機能しているため、データ取得を開始するのに適しています。

export default {
  data() {
    return { posts: [] }
  },
  created() {
    this.fetchPosts()
  }
}

mountedフック

mountedフックは、コンポーネントがDOMに挿入された後に実行されます。DOM要素や、レンダリング済みの要素を必要とするサードパーティーライブラリにアクセスする必要がある場合に使います。

export default {
  mounted() {
    this.fetchPosts()
    // template refs are now available here
  }
}

createdとmountedの比較

データ取得だけであれば、どちらも使えます。createdのほうが少し早く実行されるため、リクエストも早く開始されます。実際にレンダリング済みのDOMが必要な場合にだけmountedを選びましょう。ほとんどのAPI呼び出しでは、どちらでも問題ありません。

Composition APIのonMounted

Composition APIでは、ライフサイクルフックはsetup内で呼び出すインポート済みの関数です。mountedに相当するものがonMountedです。

import { ref, onMounted } from "vue"
import { api } from "./api"

export default {
  setup() {
    const posts = ref([])
    onMounted(async () => {
      const res = await api.get("/posts")
      posts.value = res.data
    })
    return { posts }
  }
}

ローディング状態のパターン

ネットワークリクエストには時間がかかります。loadingフラグを追跡し、データの到着中はスピナーを表示して、完了したら非表示にできるようにしましょう。

data() {
  return {
    posts: [],
    loading: false
  }
}

ローディングの切り替え

リクエストの前にloadingをtrueに設定し、結果にかかわらず完了後にfalseへ戻します。

async fetchPosts() {
  this.loading = true
  try {
    const res = await api.get("/posts")
    this.posts = res.data
  } finally {
    this.loading = false
  }
}

ローディングインジケーターの表示

テンプレートでは、loadingフラグに応じて表示を切り替え、データの到着中にスピナーやメッセージを表示します。

<template>
  <p v-if="loading">Loading...</p>
  <ul v-else>
    <li v-for="post in posts" :key="post.id">{{ post.title }}</li>
  </ul>
</template>

空の結果への対応

空のレスポンスが返る場合にも、必ず備えておきましょう。取得したリストに項目がない場合は、わかりやすいメッセージを表示します。

<ul v-if="posts.length">
  <li v-for="post in posts" :key="post.id">{{ post.title }}</li>
</ul>
<p v-else>No posts found.</p>

Composition APIでのローディングパターン

同じローディングパターンを、refを使ってComposition APIにも自然に適用できます。

const posts = ref([])
const loading = ref(false)

async function load() {
  loading.value = true
  try {
    posts.value = (await api.get("/posts")).data
  } finally {
    loading.value = false
  }
}

onMounted(load)

取得したデータの表示

データがリアクティブな状態に入ると、テンプレートが自動的にレンダリングします。ローディング中、データあり、空の状態を組み合わせると、洗練されたユーザー体験を実現できます。

<template>
  <section>
    <p v-if="loading">Loading...</p>
    <ul v-else-if="posts.length">
      <li v-for="p in posts" :key="p.id">{{ p.title }}</li>
    </ul>
    <p v-else>Nothing here yet.</p>
  </section>
</template>

理解度チェック

ライフサイクルフックとデータ取得についての理解度を確認しましょう。

まとめ

データはcreatedまたはmounted(Composition APIではonMounted)で取得します。try/finallyを使ってloadingフラグを管理すると、UIにスピナーを表示し、データを描画し、空の結果にも対応できます。次は、エラー処理とインターセプターを使って、これらのリクエストを堅牢にします。

よくある質問

「ライフサイクルフックとデータ取得」レッスンは無料ですか?

はい。「ライフサイクルフックとデータ取得」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vue Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vue Academyコースには全3レッスンが含まれています。

「ライフサイクルフックとデータ取得」で何を学びますか?

コンポーネントのライフサイクルに適したタイミングでデータを取得します ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Vue Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのVue Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。

「ライフサイクルフックとデータ取得」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このVue Academyレッスンでコードを書いて実行できますか?

はい。すべてのVue Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. AxiosによるHTTPリクエスト
  2. ライフサイクルフックとデータ取得
  3. エラーハンドリングとグローバルインターセプター
← Vue Academyに戻る