Bird
Raised Fist0
Vueframework~20 mins

Why API integration matters in Vue - Challenge Your Understanding

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
API Integration Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Why do we use APIs in Vue applications?

Imagine you want your Vue app to show weather data from an online service. Why is using an API important here?

AAPIs are only used to style the app with colors and fonts.
BAPIs let your app get fresh data from other services without storing it all inside the app.
CAPIs make your app run faster by skipping all network requests.
DAPIs replace Vue components with pre-built templates.
Attempts:
2 left
💡 Hint

Think about how your app can show new information without updating the app itself.

❓ component_behavior
intermediate
2:00remaining
What happens when a Vue component fetches API data?

Look at this Vue component snippet that fetches user info from an API. What will the component show after the data loads?

Vue
<script setup>
import { ref, onMounted } from 'vue'
const user = ref(null)
onMounted(async () => {
  const res = await fetch('https://api.example.com/user/1')
  user.value = await res.json()
})
</script>
<template>
  <div>
    <p v-if="user">Name: {{ user.name }}</p>
    <p v-else>Loading...</p>
  </div>
</template>
AIt shows nothing because user is null and no fallback is provided.
BIt shows 'Name: null' immediately and never changes.
CIt shows an error because fetch is not allowed in Vue components.
DIt first shows 'Loading...' then updates to 'Name: [user's name]' after data loads.
Attempts:
2 left
💡 Hint

Think about what happens before and after the API call finishes.

📝 Syntax
advanced
2:00remaining
Which option correctly handles API errors in Vue?

Choose the code snippet that properly catches errors when fetching API data inside a Vue component.

Vue
<script setup>
import { ref, onMounted } from 'vue'
const data = ref(null)
const error = ref(null)
onMounted(async () => {
  try {
    const res = await fetch('https://api.example.com/data')
    if (!res.ok) throw new Error('Network error')
    data.value = await res.json()
  } catch (e) {
    error.value = e.message
  }
})
</script>
<template>
  <div>
    <p v-if="error">Error: {{ error }}</p>
    <p v-else-if="data">Data loaded</p>
    <p v-else>Loading...</p>
  </div>
</template>
A
&lt;script setup&gt;
import { ref, onMounted } from 'vue'
const data = ref(null)
const error = ref(null)
onMounted(() =&gt; {
  fetch('https://api.example.com/data')
    .then(res =&gt; res.json())
    .then(json =&gt; data.value = json)
    .catch(e =&gt; error.value = e.message)
})
&lt;/script&gt;
B
&lt;script setup&gt;
import { ref, onMounted } from 'vue'
const data = ref(null)
const error = ref(null)
onMounted(async () =&gt; {
  const res = await fetch('https://api.example.com/data')
  data.value = await res.json()
})
&lt;/script&gt;
C
&lt;script setup&gt;
import { ref, onMounted } from 'vue'
const data = ref(null)
const error = ref(null)
onMounted(async () =&gt; {
  try {
    const res = await fetch('https://api.example.com/data')
    if (!res.ok) throw new Error('Network error')
    data.value = await res.json()
  } catch (e) {
    error.value = e.message
  }
})
&lt;/script&gt;
D
&lt;script setup&gt;
import { ref, onMounted } from 'vue'
const data = ref(null)
const error = ref(null)
onMounted(async () =&gt; {
  try {
    const res = await fetch('https://api.example.com/data')
    data.value = await res.json()
  } catch {
    error.value = 'Failed to load'
  }
})
&lt;/script&gt;
Attempts:
2 left
💡 Hint

Look for code that checks the HTTP response status and catches errors properly.

❓ state_output
advanced
2:00remaining
What is the final state of 'items' after this API call in Vue?

Consider this Vue code fetching a list of items and filtering them. What will be the value of items.value after the API call?

Vue
<script setup>
import { ref, onMounted } from 'vue'
const items = ref([])
onMounted(async () => {
  const res = await fetch('https://api.example.com/items')
  const data = await res.json()
  items.value = data.filter(item => item.active)
})
</script>
A[{id: 1, active: true}, {id: 3, active: true}] (only active items from API data)
B[] (empty array because filter is not applied correctly)
C[{id: 1, active: true}, {id: 2, active: false}, {id: 3, active: true}] (all items from API)
Dnull (items is never assigned)
Attempts:
2 left
💡 Hint

Think about what filter does to the array.

🔧 Debug
expert
2:00remaining
Why does this Vue API fetch cause a runtime error?

Examine this Vue code snippet. It tries to fetch user data but crashes with 'TypeError: Cannot read property 'name' of null'. Why?

Vue
<script setup>
import { ref, onMounted } from 'vue'
const user = ref(null)
onMounted(async () => {
  const res = await fetch('https://api.example.com/user/1')
  user.value = await res.json()
})
</script>
<template>
  <div>
    <p v-if="user">Name: {{ user.name }}</p>
  </div>
</template>
AThe template tries to access 'user.name' before 'user' is set, causing an error because 'user' is initially null.
BThe fetch URL is incorrect, so the API returns an error causing the crash.
CThe 'ref' is not imported properly, so 'user' is undefined.
DThe 'onMounted' hook is not supported in Vue 3, causing the code to fail.
Attempts:
2 left
💡 Hint

Check what happens before the API call finishes and how the template uses 'user'.

Practice

(1/5)
1. Why is API integration important in a Vue application?
easy
A. It allows the app to get and show live data from outside sources.
B. It makes the app run faster by avoiding any data fetching.
C. It removes the need for user interaction in the app.
D. It automatically styles the app without CSS.

Solution

  1. Step 1: Understand API integration role

    API integration connects the app to external data or services, allowing dynamic content.
  2. Step 2: Identify the benefit in Vue apps

    This connection lets the app show live or updated data, improving usefulness.
  3. Final Answer:

    It allows the app to get and show live data from outside sources. -> Option A
  4. Quick Check:

    API integration = live data connection [OK]
Hint: API integration means connecting to live data sources [OK]
Common Mistakes:
  • Thinking API integration speeds up app without data fetching
  • Believing it removes user interaction
  • Confusing API integration with styling
2. Which Vue code snippet correctly fetches data from an API inside onMounted?
easy
A. onMounted(async () => { const res = await fetch('/api/data'); data.value = await res.json(); })
B. onMounted(() => { fetch('/api/data').then(res => data = res.json()) })
C. onMounted(() => { const res = fetch('/api/data'); data.value = res.json(); })
D. onMounted(async () => { data = fetch('/api/data').json() })

Solution

  1. Step 1: Check async fetch usage

    onMounted(async () => { const res = await fetch('/api/data'); data.value = await res.json(); }) uses async/await correctly to wait for fetch and JSON parsing.
  2. Step 2: Identify reactive assignment

    It assigns the parsed JSON to data.value, which is correct for Vue refs.
  3. Final Answer:

    onMounted(async () => { const res = await fetch('/api/data'); data.value = await res.json(); }) -> Option A
  4. Quick Check:

    Async fetch + await json + reactive ref = correct [OK]
Hint: Use async/await and assign to ref.value in Vue [OK]
Common Mistakes:
  • Not awaiting fetch or json parsing
  • Assigning directly to data without .value
  • Using fetch without async/await or then properly
3. Given this Vue code, what will be the value of message after mounting?
const message = ref('');
onMounted(async () => {
  try {
    const res = await fetch('/api/greet');
    const data = await res.json();
    message.value = data.text;
  } catch {
    message.value = 'Error loading';
  }
});

Assuming the API returns { "text": "Hello Vue!" } successfully.
medium
A. "" (empty string)
B. "Error loading"
C. "Hello Vue!"
D. undefined

Solution

  1. Step 1: Analyze successful fetch and JSON parse

    The API returns { "text": "Hello Vue!" }, so data.text is "Hello Vue!".
  2. Step 2: Assign value to message ref

    Inside try block, message.value is set to "Hello Vue!".
  3. Final Answer:

    "Hello Vue!" -> Option C
  4. Quick Check:

    API success sets message = "Hello Vue!" [OK]
Hint: Try block sets message on success, catch on failure [OK]
Common Mistakes:
  • Assuming catch runs on success
  • Forgetting to use .value for ref
  • Expecting empty string if fetch succeeds
4. What is wrong with this Vue API call code?
const data = ref(null);
onMounted(() => {
  const res = fetch('/api/items');
  data.value = res.json();
});
medium
A. ref cannot hold null values initially.
B. fetch is asynchronous but not awaited, so data.value gets a Promise.
C. res.json() is not a valid method on fetch response.
D. onMounted cannot be used for API calls.

Solution

  1. Step 1: Check fetch usage

    fetch returns a Promise and must be awaited or handled with then().
  2. Step 2: Identify assignment error

    Assigning res.json() without awaiting means data.value gets a Promise, not actual data.
  3. Final Answer:

    fetch is asynchronous but not awaited, so data.value gets a Promise. -> Option B
  4. Quick Check:

    Missing await causes Promise assignment [OK]
Hint: Always await fetch and json() to get real data [OK]
Common Mistakes:
  • Not awaiting fetch or json()
  • Thinking ref can't start as null
  • Believing res.json() is invalid
  • Misunderstanding onMounted usage
5. You want to show a loading message while fetching API data in Vue. Which approach correctly handles loading and error states?
hard
A. Use a computed property to fetch data and handle errors inside it.
B. Only fetch data without loading or error states; Vue handles it automatically.
C. Set loading to false before fetch and true after fetch completes.
D. Use refs for loading and error, set loading true before fetch, false after, and catch errors to set error message.

Solution

  1. Step 1: Understand loading and error state management

    Loading should be true before fetch starts and false after it ends. Errors should be caught and stored.
  2. Step 2: Identify correct Vue pattern

    Using refs for loading and error, updating them properly around async fetch, is the correct approach.
  3. Final Answer:

    Use refs for loading and error, set loading true before fetch, false after, and catch errors to set error message. -> Option D
  4. Quick Check:

    Manage loading and error states explicitly [OK]
Hint: Set loading true before fetch, false after; catch errors [OK]
Common Mistakes:
  • Ignoring loading and error states
  • Setting loading false before fetch
  • Using computed for async fetch (not recommended)
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard